2013-03-26 28 views
2

我想在rc.d /中創建一個文件,它將啓動我寫的一個/ bin/sh腳本。我下面在這裏找到一些例子:在FreeBSD中爲shell腳本創建一個啓動守護進程

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文件的正確方法是什麼?

感謝

回答

3

在一般情況下,一個守護進程應該創建和清理自己的PID文件。

從一個shell腳本,你可以給以下命令來創建它;

echo $$ >/var/run/${name}.pid 

不要忘記在退出腳本之前刪除文件。編寫一個cleanup()函數,並在發生某些信號時讓trap調用該函數。還要在退出腳本之前調用清理。

4

看看現有的守護進程(例如/etc/rc.d/mountd)。然後查看/etc/rc.subr中的子例程 - 這裏有代碼來檢查PID文件,但沒有創建它。

換句話說,您可以在守護進程啓動腳本中聲明PID文件是什麼,但是創建它取決於守護進程。說到守護進程,如果守護進程實際上是一個shell腳本,您可能希望使用守護進程(8)工具。該實用程序將負責爲您創建PID文件。 (如果守護程序是用C語言,你可以/應該使用守護進程(3)功能。)

順便說一句,在我自己的意見,守護進程,當打開了PID-文件的創建,也應該他們(有flock(3)或fcntl(2)或lockf(3))。這樣,如果一個實例在沒有刪除PID文件的情況下崩潰(或者被殺死),下一個實例沒有問題確定,該文件是陳舊的。

相關問題