Is there an easy way to create a FreeBSD rc script?
command
should not contain multiple words. This is the cause of the [
error you see. You should set any flags separately.
Also, you should use pytivo_user
to set the running uid, and not daemon -u
. See the rc.subr(8) man page for all these magic variables.
Also, you should let the rc subsystem know that pytivo is a Python script so that it can find the process when it checks to see if it's running.
Finally, you should use the idiomatic set_rcvar
for rcvar
.
Something like this (I'm not sure this is the right Python path):
#!/bin/sh
# REQUIRE: LOGIN
. /etc/rc.subr
name=pytivo
rcvar=`set_rcvar`
command=/usr/local/pytivo/pyTivo.py
command_interpreter=/usr/local/bin/python
pytivo_user=jnet
start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
load_rc_config $name
run_rc_command "$1"
Related videos on Youtube
Hugo
Updated on September 18, 2022Comments
-
Hugo over 1 year
I have a FreeBSD jail in which I run a server using the command:
/usr/sbin/daemon /path/to/script.py
At the moment I have to run this command every time I restart the machine and the jail starts. I'd like to have this command started from
/etc/rc
. Is there an easy way to create a FreeBSD rc script for adaemon
command?
UPDATE: I read through this BSD documentation about rc scripts, and from that I created the following script in
/etc/rc.d/pytivo
:#!/bin/sh . /etc/rc.subr name=pytivo rcvar=pytivo_enable procname="/usr/local/pytivo/pyTivo.py" command="/usr/sbin/daemon -u jnet $procname" load_rc_config $name run_rc_command "$1"
This works to start the python script I am wanting as a daemon when the jail starts... (given
pytivo_enable="YES"
is in/etc/rc.conf
) but the rc script doesn't know if the daemon is running (it thinks it isn't when it is) and it gives a warning when I try to start it:[root@meryl /home/jnet]# /etc/rc.d/pytivo start [: /usr/sbin/daemon: unexpected operator Starting pytivo. [root@meryl /home/jnet]#
So it's close, and it works, but I feel like I should be able to get better functionality than this.
-
Admin over 11 yearsYou need to put this script somewhere(Can't remember now) and put a line
XX_enable="YES"
in /etc/rc.conf to make it auto start. Start by finding existing scripts -
Admin over 11 yearsI'm looking for an easy way to create the script... Is there a good script I can copy and reuse?
-
-
Hugo over 11 yearsI was hopeful this would help, but it doesn't. I still get
: /usr/sbin/daemon: unexpected operator
and my rc script still doesn't know if the script is actually running. -
arved over 11 yearsyou could try to invoke the script with -x to see which command fails
-
Hugo over 11 yearsThe problem is that
usr/local/pytivo/pyTivo.py
doesn't daemonize, therefore without calling/usr/bin/daemon
I will just get the command running in the forground when I run/etc/rc.d/pytivo start
-
Hugo over 11 yearsHowever this does correct the
status
andstop
commands! -
user2578106 over 11 yearsOh, the script doesn't daemonize? I think the easiest fix is to set
start_cmd
before callingload_rc_config
:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
-
Dave Martorana almost 10 yearsThis had the magic I needed to get my script running. Thanks!