我必须为在前台运行的程序编写一个门户 init.d 脚本(无守护进程选项;无 pidfile 选项)并记录到 stdout/stderr。
该程序应该登录到系统日志服务。该程序应以非root 用户身份运行,例如nobody。
init.d 文件应该在 Debian 和 RHEL 基础系统(如 SLES 11)下运行。
我无法在 Debian 系统上安装其他程序,例如基于 RHEL 的进程。
这是我的问题
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发行版安全的。
由于我需要自动重启等功能,我应该使用 /etc/inittab 而不是传统的 init.d 脚本吗?