Как это может быть сделано? Я знаю, что это довольно просто и включает добавление чего-то вроде &
или &>
к фактической команде, запускающей сценарий инициализации.
Но каков наилучший подход и как обеспечить отсоединение сценария инициализации, предположим, что файл журнала - /var/log/customDaemon.log?
Вот сценарий инициализации, который у меня есть. Я также не уверен, является ли подход в сценарии аккуратным или просто неприятным взломом.
#!/bin/bash
#
# /etc/rc.d/init.d/customDaemon
#
# description: "The Daemon"
# processname: customDaemon
# pidfile: "/var/run/customDaemon.pid"
# Source function library.
. /etc/rc.d/init.d/functions
start() {
echo "Starting customDaemon"
/var/customDaemon &> /dev/null &
return 1
}
stop() {
echo "Stopping tweriod"
prockill customDaemon
return 2
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
restart
;;
status)
status customDaemon
;;
*)
echo "Usage: customDaemon [start|stop|restart|status]"
exit 1
;;
esac
Попробуй это:
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
Я предлагаю вам запустить службу с обычным пользователем вместо root
.
Чтобы показать [ ХОРОШО ], [ НЕ СМОГЛИ ] сообщения, вы можете проверить статус выхода, примерно так:
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
RETVAL=$?
[ $RETVAL = 0 ] && echo -ne '\t\t\t\t\t[ \033[32mOK\033[0m ]\n'
Вы также можете взглянуть на предварительно определенные функции в /etc/rc.d/init.d/functions
: daemon
, killproc
, action
, ...
/var/customDaemon >> /var/log/customDaemon.log 2>&1 &
RETVAL=$?
[ $RETVAL = 0 ] && action $"Starting customDaemon... " /bin/true
Замените / dev / null на имя файла для ведения журнала.
start() {
echo "Starting customDaemon"
/var/customDaemon > /var/log/customDaemon/console.log &
return 0
}
Я также изменил код возврата, потому что, если он может запуститься, он должен вернуть 0 - для успеха.
Качество init-скрипта в порядке. Ничего страшного не происходит, и у вас есть lsb-функции, что очень хорошо.
Что можно улучшить, это если приложение поддерживает перенаправление ведения журнала, чтобы вы могли правильно обернуть вещи с помощью logrotation.
Также было бы хорошо, если бы вы проверили, успешно ли запустился демон, и выдавали бы ошибку (и выходили 1) в случае неудачи.