我正在尝试为某些服务设置 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...
变量$?
也设置得当。还请注意,您提供的进程名称可以是任何未经检查的内容。