Я пытаюсь настроить скрипт 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
показывает работает
из-за моего сценария.
Я не думаю вы правильно используете 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...
Переменная $?
также установлена соответствующим образом. Также обратите внимание, что предоставленное вами имя процесса может быть любым, что не проверено.