Centos

pidof 服務不存在

  • November 23, 2015

我正在嘗試為某些服務設置 init.d 腳本 - 讓它成為位於 /usr/bin/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

我認為您沒有正確使用 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...

$?變數也被適當地設置。另請注意,您提供的程序名稱可以是任何未檢查的名稱。

引用自:https://serverfault.com/questions/738191