运行 boot/reboot 之后的 FreeBSD 脚本
Running a script in FreeBSD after boot/reboot
我有一个简单的脚本:
#!/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 ""
里面 /usr/local/etc/rc.d
。它是可执行的。它被注册到 /etc/rc.conf
我需要它在 boot/reboot 之后启动。我设法通过 Cron 使用
做到了
@reboot
但它看起来不合法。在 boot/reboot 之后自动 运行 该脚本的正确方法是什么?
首先,官方文档中有一篇文章解释了如何编写rc脚本:Practical rc.d scripting in BSD.
它可能会回答您的大部分问题。
关于您的脚本:
PROVIDE
、REQUIRE
等关键字必须是评论。有关详细信息,请参阅 rc(8) manual page and the 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) 开始,然后查看 另请参见 部分中列出的其他手册。
我有一个简单的脚本:
#!/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 ""
里面 /usr/local/etc/rc.d
。它是可执行的。它被注册到 /etc/rc.conf
我需要它在 boot/reboot 之后启动。我设法通过 Cron 使用
做到了@reboot
但它看起来不合法。在 boot/reboot 之后自动 运行 该脚本的正确方法是什么?
首先,官方文档中有一篇文章解释了如何编写rc脚本:Practical rc.d scripting in BSD.
它可能会回答您的大部分问题。
关于您的脚本:
PROVIDE
、REQUIRE
等关键字必须是评论。有关详细信息,请参阅 rc(8) manual page and the 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) 开始,然后查看 另请参见 部分中列出的其他手册。