簡體   English   中英

在FreeBSD中為shell腳本創建啟動守護進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM