포그라운드에서 실행되고 stdout/stderr에 기록되는 프로그램에 대한 포털 init.d 스크립트(데몬 옵션 없음, pidfile 옵션 없음)를 작성해야 합니다.
프로그램은 syslog 서비스에 로그인해야 합니다. 프로그램은 none과 같은 루트가 아닌 사용자로 실행되어야 합니다.
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
질문: &
init.d 스크립트를 사용해도 안전합니까? LSB 기본값은 어떻습니까? 어떻게 사용하나요? 제 생각에는 LSB를 따르는 것이 Linux 배포판 전반에 걸쳐 안전할 것입니다.
자동 재시작과 같은 기능이 필요하므로 기존 init.d 스크립트 대신 /etc/inittab을 사용해야 합니까?