我有一个简单的脚本:
#!/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
但是看起来不合法。在启动/重新启动后自动运行该脚本的正确方法是什么?
答案 0 :(得分:3)
首先,官方文档中有一篇文章介绍了如何编写rc脚本:Practical rc.d scripting in BSD。
它可能会回答您的大多数问题。
关于脚本:
PROVIDE
,REQUIRE
等关键字必须为注释。有关更多详细信息,请参见rc(8) manual page和rcorder(8) manual page。
#!/bin/sh
#
# PROVIDE: test
# REQUIRE: LOGIN NETWORKING
我认为您还会错过将test_enable
设置为默认值。
: "${test_enable:="NO"}"
您并不是真的只想将指令启动您的守护程序放在脚本的全局范围内。您的这段代码很糟糕:
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
变量。
总而言之,最好的主意是查看/etc/rc.d
和/usr/local/etc/rc.d
中的其他脚本,以了解人们如何编写这些脚本以及什么是标准。这是我最近在为Keybase文件系统(KBFS)开发守护程序时所学的方法。您可以查看代码here。
联机帮助页也很有帮助。从rc(8)开始,然后查看另请参阅部分中列出的其他手册。