pidof 服务不存在

pidof 服务不存在

我正在尝试为某些服务设置 init.d 脚本 - 让它成为位于 /usr/bin/uptime 的 uptime。这是我的脚本:

#!/bin/bash
# description: read service
#Source function library
. /etc/rc.d/init.d/functions


RETVAL=0
UPTIME=/usr/bin/uptime
PIDFILE=/var/run/read.pid

start() {
echo -n $"Starting $UPTIME service: "
/usr/bin/uptime &
echo $! > $PIDFILE; 
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/uptime
echo
return $RETVAL
}

stop() {
echo -n $"Shutdown $UPTIME service: "
killproc /usr/bin/uptime
rm -f $PIDFILE
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/uptime
echo
return $RETVAL
}

restart() {
echo -n $"Restarting $UPTIME service: "
killproc /usr/bin/uptime
/usr/bin/uptime &
}

status() {
if [ `pidof /var/run/read.pid` ];then
        echo "Running"
    else
        echo "Not running"
    fi
 }


case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
status)
    status /usr/bin/uptime
    ;;
restart|reload)
    stop
    start
    ;;
*)
    echo $"Usage: $0 {start|stop|restart|reload|status}"
    exit 1
esac
exit $?

启动后,我的脚本PIDFILE=/var/run/read.pid已成功创建。但是当我将其用于status我的服务时 - 它没有运行。这意味着pidof /var/run/read.pid没有找到我的服务的 pid。ps -ef也没有显示任何内容。我要怎么做才能让我的读取服务在后台正确运行,并且我的status命令由于我的脚本而/etc/init.d/read.sh status显示。running

答案1

我认为你没有正确使用 pidof,pidof 接受一个进程名称并返回它的 PID,例如

pidof httpd
19420 7273 7272 7271 7270 7269 7268 7267 7266

您向 pidof 传递的是文件名而不是进程名。我猜您想做的是检查 pid 文件中存储的 pid 的进程是否仍在运行。

您之前遇到困难的函数文件似乎有一个名为的函数,status它看起来几乎可以完成您想要的操作

status -p pidfile processname

例如

status -p /var/run/read.pid someprocess
someprocess (pid  7272) is running...

变量$?也设置得当。还请注意,您提供的进程名称可以是任何未经检查的内容。

相关内容