これはどのように行うことができますか?私はそれがかなりシンプルで、&
または&>
は、initスクリプトを開始する実際のコマンドに置き換えます。
しかし、最善の方法は何ですか。また、ログファイルが/var/log/customDaemon.logであるとすると、initスクリプトが確実に切り離されるようにするにはどうすればよいでしょうか。
これが私が持っている初期化スクリプトです。また、スクリプトのアプローチがきちんとしているのか、それとも厄介なハックなのかはわかりません。
#!/bin/bash
#
# /etc/rc.d/init.d/customDaemon
#
# description: "The Daemon"
# processname: customDaemon
# pidfile: "/var/run/customDaemon.pid"
# Source function library.
. /etc/rc.d/init.d/functions
start() {
echo "Starting customDaemon"
/var/customDaemon &> /dev/null &
return 1
}
stop() {
echo "Stopping tweriod"
prockill customDaemon
return 2
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
restart
;;
status)
status customDaemon
;;
*)
echo "Usage: customDaemon [start|stop|restart|status]"
exit 1
;;
esac
これを試して:
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
root
ではなく通常のユーザーでサービスを実行することをお勧めします。
[OK]、[FAILED]メッセージを表示するには、次のような終了ステータスを確認できます。
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
RETVAL=$?
[ $RETVAL = 0 ] && echo -ne '\t\t\t\t\t[ \033[32mOK\033[0m ]\n'
/etc/rc.d/init.d/functions
で事前定義された関数を確認することもできます:daemon
、killproc
、action
、...
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
RETVAL=$?
[ $RETVAL = 0 ] && action $"Starting customDaemon... " /bin/true
/ dev/nullをロギング用のファイル名に置き換えます。
start() {
echo "Starting customDaemon"
/var/customDaemon > /var/log/customDaemon/console.log &
return 0
}
リターンコードも変更しました。開始できる場合は、0を返す必要があるためです。
Initスクリプトの品質はOKです。それほど厄介なことではなく、あなたにはlsb関数があります-これは非常に良いことです。
改善できるのは、アプリケーションがロギング自体のリダイレクトをサポートしていて、ログローテーションで適切にラップできることです。
デーモンが正常に起動したかどうかを確認し、失敗した場合はエラーをスローして(そして1を終了する)も良いでしょう。