Hello,
I'm trying to write a startup script for an application called netbox (it's an
opensource IPAM).
I created a user and a group
# grep netbox /etc/group
_netbox:*:9994:
# grep netbox /etc/passwd
_netbox:*:9994:9994::/home/netbox:/sbin/nologin
And I have this script
#!/bin/ksh
_BASEDIR=/var/www/htdocs/applications/netbox-4.0.7
daemon="${_BASEDIR}/env/bin/gunicorn"
daemon_flags="--name netbox --pid /var/run/netbox.pid --user=www --group=www
--config=${_BASEDIR}/gunicorn.py"
daemon_flags="${daemon_flags} --log-level=info --log-file=- netbox.wsgi"
daemon_user="_netbox"
. /etc/rc.d/rc.subr
pexp="${_BASEDIR}/env/bin/python3.10 ${daemon}${daemon_flags:+ ${daemon_flags}}"
rc_reload=YES
rc_bg=YES
echo "pkill -f ${daemon}"
APPDIR=${_BASEDIR}/netbox
rc_pre() {
cat <<EOF>/var/run/netbox_start
APPDIR=${_BASEDIR}/netbox
packages:${APPDIR}${PYTHONPATH:+:${PYTHONPATH}}
cd ${_BASEDIR}/netbox
. ${_BASEDIR}/env/bin/activate
export
PYTHONPATH=${_BASEDIR}/env/lib/python3.10/site-packages:${APPDIR}${PYTHONPATH:+:${PYTHONPATH}}
exec gunicorn ${daemon_flags}
EOF
chmod u+x /var/run/netbox_start
chmod o+x /var/run/netbox_start
}
rc_start() {
rc_exec /var/run/netbox_start
}
rc_stop() {
pkill -f "${_BASEDIR}/env/bin/gunicorn"
}
rc_cmd $1
I have multiple problems:
i) When I do /etc/rc.d/netbox -d start I have this error message
# /etc/rc.d/netbox -d start
doing _rc_parse_conf
netbox_flags empty, using default >--name netbox --pid /var/run/netbox.pid
--user=www --group=www
--config=/var/www/htdocs/applications/netbox-4.0.7/gunicorn.py --log-level=info
--log-file=- netbox.wsgi<
pkill -f /var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn
doing rc_check
netbox
doing rc_pre
doing rc_start
doing _rc_wait_for_start
doing rc_check
doing rc_check
[2024-07-25 00:52:55 +0200] [61573] [INFO] Starting gunicorn 22.0.0
...
PermissionError: [Errno 13] Permission denied: '/var/run/tmp5jrbni2l'
doing _rc_rm_runfile
(failed)
I don't know why it's trying to create /var/run/tmp5jrbni2l
If I remove daemon_user="_netbox", everything works
Q1: What can I do to avoid this permission problem ? Because I'm not supposed
to give write access to /var/run
ii) When I try to stop the process, it doesn't work
# ps ax | grep /var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn
61611 p1 S 0:00.75
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
79274 p1 S 0:04.63
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
50615 p1 S 0:04.12
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
9700 p1 S 0:04.08
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
88687 p1 S 0:04.14
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
72441 p1 S 0:04.05
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
# /etc/rc.d/netbox -d stop
doing _rc_parse_conf
netbox_flags empty, using default >--name netbox --pid /var/run/netbox.pid
--user=www --group=www
--config=/var/www/htdocs/applications/netbox-4.0.7/gunicorn.py --log-level=info
--log-file=- netbox.wsgi<
pkill -f /var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn
doing _rc_parse_conf /var/run/rc.d/netbox
doing rc_check
# ps ax | grep /var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn
61611 p1 S 0:00.78
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
79274 p1 S 0:04.66
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
50615 p1 S 0:04.15
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
9700 p1 S 0:04.11
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
88687 p1 S 0:04.17
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
72441 p1 S 0:04.08
/var/www/htdocs/applications/netbox-4.0.7/env/bin/python
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox --pid
/var/run/netbox.pid --user=www --group=www --config=/var/www/htdocs/appli
However when I launch this command it works
# pkill -f /var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn
# [2024-07-25 01:01:20 +0200] [61611] [INFO] Handling signal: term
[2024-07-24 23:01:20 +0000] [9700] [INFO] Worker exiting (pid: 9700)
[2024-07-24 23:01:20 +0000] [72441] [INFO] Worker exiting (pid: 72441)
[2024-07-24 23:01:20 +0000] [79274] [INFO] Worker exiting (pid: 79274)
[2024-07-24 23:01:21 +0000] [88687] [INFO] Worker exiting (pid: 88687)
[2024-07-24 23:01:21 +0000] [50615] [INFO] Worker exiting (pid: 50615)
[2024-07-25 01:01:22 +0200] [61611] [INFO] Shutting down: Master
Q2: It's supposed to match
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn but the process is
not killed.
Do you see any reason why ?
Thank you