フォアグラウンドで実行され、stdout / stderrに書き込まれるプログラム用のポータルinit.dスクリプト(デーモンオプションなし、pidfileオプションなし)を作成する必要があります。
プログラムはsyslogサービスにログインする必要があります。プログラムは、noneなどの非rootユーザーとして実行する必要があります。
init.dファイルは、DebianやRHELの基本システム(SLES 11など)で実行する必要があります。
RHELベースのプロセスなど、Debianシステムに他のプログラムをインストールすることはできません。
これは私の問題です。
daemonize
SLESには存在しません。startproc
背景オプションなしstart-stop-daemon
背景オプションとユーザーオプションはありません。
ログsyslogをルーティングする方法は? >& /dev/logを使用する必要がありますか?または2>&1 |ロガー-tプログラミング
オンラインで見つけた多くの例は/etc/init.d/functions
(SUSEには存在しません)依存しています/etc/rc.status
。/etc/rc.d/init.d/functions
これはSUSEでのみ動作するように見える現在のアプローチです。
#!/bin/bash
#
# node_exporter This script starts and stops the node_exporter daemon
#
# chkconfig: - 85 15
# description: Node Exporter is a Prometheus exporter for hardware and OS metrics
### BEGIN INIT INFO
# Provides: node_exporter
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop node_exporter
# Description: Node Exporter is a Prometheus exporter for hardware and OS metrics
### END INIT INFO
NAME=node_exporter
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="--web.listen-address=:9100"
PIDFILE=/var/run/$NAME.pid
LOGFILE=/var/log/$NAME.log
. /lib/lsb/init-functions
start() {
echo -n "Starting $NAME: "
start_daemon $DAEMON $DAEMON_ARGS &
echo $! > $PIDFILE
echo "done."
}
stop() {
echo -n "Stopping $NAME: "
killproc -p $PIDFILE $DAEMON
echo "done."
}
status() {
if pidofproc -p $PIDFILE $DAEMON; then
echo "$NAME not running."
else
echo "$NAME running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;;
esac
exit 0
Q:&
init.dスクリプトを使用しても安全ですか? LSBのデフォルトはどうですか?どうやって使うの?私の考えでは、LSBに従うことはLinuxディストリビューションを通して安全です。
自動再起動などの機能が必要なので、既存のinit.dスクリプトの代わりに/etc/inittabを使用する必要がありますか?