Pac*_*rsh 5 cron freebsd sh 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"
Run Code Online (Sandbox Code Playgroud)
里面/usr/local/etc/rc.d。它是可执行的。它被注册到 /etc/rc.conf
我需要它在启动/重启后启动。我设法使用 Cron 做到了
@reboot
Run Code Online (Sandbox Code Playgroud)
但它看起来不合法。在启动/重新启动后自动运行该脚本的正确方法是什么?
首先,官方文档中有一篇文章解释了如何编写rc脚本:Practical rc.d scripting in BSD。
它可能会回答你的大部分问题。
当涉及到您的脚本时:
像PROVIDE,REQUIRE等关键字必须是注释。有关更多详细信息,请参阅rc(8) 手册页和rcorder(8) 手册页。
#!/bin/sh
#
# PROVIDE: test
# REQUIRE: LOGIN NETWORKING
Run Code Online (Sandbox Code Playgroud)我认为您也错过了设置test_enable为默认值的机会。
: "${test_enable:="NO"}"
Run Code Online (Sandbox Code Playgroud)您真的不想将启动守护程序的指令放在脚本的全局范围内。这部分代码很糟糕:
cd /home/deploy/projects/test
/usr/sbin/daemon -u deploy /usr/local/bin/node /home/deploy/projects/test/server.js
Run Code Online (Sandbox Code Playgroud)
您应该尝试定义一个start_cmd函数(argument_cmd在rc.subr(8) 手册页中查找更多信息)或定义command变量。
总而言之,最好的想法是查看其他脚本/etc/rc.d并/usr/local/etc/rc.d了解人们如何编写这些脚本以及标准是什么。这是我最近在为 Keybase 文件系统 (KBFS) 开发守护进程时学到的。你可以在这里查看代码。
联机帮助页也很有帮助。从rc(8) 开始,然后查看SEE ALSO部分中列出的其他手册。
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |