Is there an easy way to create a FreeBSD rc script?

9,814

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"
Share:
9,814

Related videos on Youtube

Hugo
Author by

Hugo

Updated on September 18, 2022

Comments

  • Hugo
    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 a daemon 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
      Admin over 11 years
      You 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
      Admin over 11 years
      I'm looking for an easy way to create the script... Is there a good script I can copy and reuse?
  • Hugo
    Hugo over 11 years
    I 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
    arved over 11 years
    you could try to invoke the script with -x to see which command fails
  • Hugo
    Hugo over 11 years
    The 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
    Hugo over 11 years
    However this does correct the status and stop commands!
  • user2578106
    user2578106 over 11 years
    Oh, the script doesn't daemonize? I think the easiest fix is to set start_cmd before calling load_rc_config: start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
  • Dave Martorana
    Dave Martorana almost 10 years
    This had the magic I needed to get my script running. Thanks!