Служба pidof не существует

Я пытаюсь настроить скрипт 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 был успешно создан. Но когда я использовал статус для своей службы, она не работала. Это означало, что pidof /var/run/read.pid не нашел pid моей службы. ps -ef тоже ничего не показывал. Что мне делать, чтобы моя служба чтения работала в фоновом режиме и моя команда status /etc/init.d/read.sh status показывает работает из-за моего сценария.

-1
задан 22 November 2015 в 21:43
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...

Переменная $? также установлена ​​соответствующим образом. Также обратите внимание, что предоставленное вами имя процесса может быть любым, что не проверено.

0
ответ дан 5 December 2019 в 20:31

Теги

Похожие вопросы