Hello Stuart,

Thank you for your answer.

1)
>but you start as _netbox:
>> daemon_user="_netbox"
>that won't work, it needs root to change uid (to www).
I finally chose to run it as _netbox and change this line
daemon_flags="--name netbox --pid /var/run/netbox.pid --user=_netbox 
--group=_netbox --config=${_BASEDIR}/gunicorn.py"
So that everything is aligned


2)
>this doesn't make a lot of sense, why not either start it from the
>rc script itself, or save a separate script to disk, rather than
>writing to /var/run?

>also if you run commands from the venv bin directory, they set
>things up for you so you don't need to source "activate".

I didn't understand what you wrote except that what I did was not correct.

To run the application that acts like a daemon, I need to do these tasks 
manually

_BASEDIR=/var/www/htdocs/applications/netbox-4.0.7
APPDIR=${_BASEDIR}/netbox
daemon_flags="--name netbox --pid /var/run/netbox.pid --user=_netbox 
--group=_netbox --config=${_BASEDIR}/gunicorn.py"
daemon_flags="${daemon_flags} --log-level=info --log-file=- netbox.wsgi"

cd ${_BASEDIR}/netbox
. ${_BASEDIR}/env/bin/activate
export 
PYTHONPATH=${_BASEDIR}/env/lib/python3.10/site-packages:${APPDIR}${PYTHONPATH:+:${PYTHONPATH}}
exec gunicorn ${daemon_flags}

Q: When you write "start it from the rc script itself", should I try to add 
instructions in the rc_pre() section ?
Q: You - write if you run commands from the venv bin directory, they set things 
up for you so you don't need to source "activate" -
So I don't need to use . ${_BASEDIR}/env/bin/activate
Should my rc_start() only contain rc_exec ${daemon} ${daemon_flags} ?

Regards



Le jeudi 25 juillet 2024 à 09:45:10 UTC+2, Stuart Henderson 
<stu.li...@spacehopper.org> a écrit : 





here you tell it to run it as www:

> 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"

but you start as _netbox:

> daemon_user="_netbox"

that won't work, it needs root to change uid (to www).

> pexp="${_BASEDIR}/env/bin/python3.10 ${daemon}${daemon_flags:+ 
> ${daemon_flags}}"

> echo "pkill -f ${daemon}"

?

> 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
> }

this doesn't make a lot of sense, why not either start it from the
rc script itself, or save a separate script to disk, rather than
writing to /var/run?

also if you run commands from the venv bin directory, they set
things up for you so you don't need to source "activate".

> rc_stop() {
>         pkill -f "${_BASEDIR}/env/bin/gunicorn"
> }

if pexp was set correctly then you wouldn't need to override rc_stop.

> 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

must be something in gunicorn or netbox.

> If I remove daemon_user="_netbox", everything works

in that case, it starts as root, so it can write there (at least until
it drops privs).

> 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
...
> # /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

I didn't check carefully but I guess pexp doesn't match this process,
so rc_check doesn't find it running.

You could try

pexp="/var/www/htdocs/applications/netbox-4.0.7/env/bin/python 
/var/www/htdocs/applications/netbox-4.0.7/env/bin/gunicorn --name netbox.*"



-- 
Please keep replies on the mailing list.

Reply via email to