[英]Creating a startup daemon for a shell script in FreeBSD
我试图在rc.d /中创建一个文件,该文件将启动我编写的/ bin / sh脚本。 我正在跟踪一些在这里找到的示例:
http://www.freebsd.org/doc/en/articles/rc-scripting/article.html#rc-flags
#!/bin/sh -x
# PROVIDE: copyfiles
. /etc/rc.subr
name=copyfiles
rcvar=copyfiles_enable
pidfile="/var/run/${name}.pid"
command="/var/etc/copy_dat_files.sh -f /var/etc/copydatafiles.conf"
command_args="&"
load_rc_config $name
run_rc_command "$1"
好像我的pidfile有问题。 我的脚本需要成为创建pid文件的脚本,还是会自动创建? 我已经尝试了两种方式,无论我是否让我的脚本创建一个pid文件,我得到一个错误,pid文件是不可读的。
如果我的脚本应该制作,那么制作pid文件的正确方法是什么?
谢谢
例如,查看现有的守护程序(例如/etc/rc.d/mountd)。 然后查看/etc/rc.subr中的子例程-那里有代码可以检查PID文件,但是什么也没有创建。
换句话说,您可以在守护程序启动脚本中声明PID文件是什么,但创建该文件取决于守护程序。 说到守护程序,如果您的守护程序实际上是一个shell脚本,那么您可能希望使用daemon(8)实用程序。 该实用程序将为您处理PID文件的创建。 (如果守护程序是用C编写的,则可以/应该使用daemon(3)函数。)
BTW,在我看来,守护进程在打开用于创建的PID文件时,也应该锁定它们(使用flock(3)或fcntl(2)或lockf(3))。 这样,如果一个实例崩溃了(或被杀死)而没有删除PID文件,则下一个实例将毫无问题地确定该文件是陈旧的。
通常,守护程序应该创建并清理自己的PID文件。
从shell脚本中,您可以提供以下命令来创建它;
echo $$ >/var/run/${name}.pid
不要忘记在退出脚本之前删除文件。 编写一个cleanup()
函数来执行该操作,并让trap
在发生某些信号时调用该函数。 还要在退出脚本之前调用cleanup。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.