前台程序的 init.d 脚本

前台程序的 init.d 脚本

我必须为在前台运行的程序编写一个门户 init.d 脚本(无守护进程选项;无 pidfile 选项)并记录到 stdout/stderr。

该程序应该登录到系统日志服务。该程序应以非root 用户身份运行,例如nobody。

init.d 文件应该在 Debian 和 RHEL 基础系统(如 SLES 11)下运行。

我无法在 Debian 系统上安装其他程序,例如基于 RHEL 的进程。

这是我的问题

  • daemonizeSLES 上不存在
  • 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 脚本吗?

相关内容