引导/重启后在FreeBSD中运行脚本

时间:2018-08-27 08:45:58

标签: cron sh freebsd rc

我有一个简单的脚本:

#!/bin/sh

PROVIDE: test
REQUIRE: LOGIN NETWORKING

. /etc/rc.subr

name="test"
load_rc_config $name

rcvar=test_enable

cd /home/deploy/projects/test
/usr/sbin/daemon -u deploy /usr/local/bin/node /home/deploy/projects/test/server.js

run_rc_command "$1"
/usr/local/etc/rc.d

。它是可执行的。它已注册到/etc/rc.conf

我需要它在启动/重启后启动。我设法用Cron做到了

@reboot

但是看起来不合法。在启动/重新启动后自动运行该脚本的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

首先,官方文档中有一篇文章介绍了如何编写rc脚本:Practical rc.d scripting in BSD

它可能会回答您的大多数问题。

关于脚本:

  1. PROVIDEREQUIRE等关键字必须为注释。有关更多详细信息,请参见rc(8) manual pagercorder(8) manual page

    #!/bin/sh
    #
    # PROVIDE: test
    # REQUIRE: LOGIN NETWORKING
    
  2. 我认为您还会错过将test_enable设置为默认值。

    : "${test_enable:="NO"}"
    
  3. 您并不是真的只想将指令启动您的守护程序放在脚本的全局范围内。您的这段代码很糟糕:

    cd /home/deploy/projects/test
    /usr/sbin/daemon -u deploy /usr/local/bin/node /home/deploy/projects/test/server.js
    

    您应该尝试定义一个start_cmd函数(在rc.subr(8) manual page中查找argument_cmd以获得更多信息)或定义command变量。

    li>

总而言之,最好的主意是查看/etc/rc.d/usr/local/etc/rc.d中的其他脚本,以了解人们如何编写这些脚本以及什么是标准。这是我最近在为Keybase文件系统(KBFS)开发守护程序时所学的方法。您可以查看代码here

联机帮助页也很有帮助。从rc(8)开始,然后查看另请参阅部分中列出的其他手册。