Я чувствую уверенность, что кто-то, где-нибудь изменил что-то на сервере, но я не могу определить то, что произошло. Следует иметь в виду, что сервис работал отлично до начала этой недели. (ОТМЕТЬТЕ: это характерно для одного сервера, поскольку эта та же услуга работает очень хорошо на 4 других серверах.)
У меня есть следующий сервис для выполнения Сценария PHP
start on filesystem and net-device-up IFACE=eth0
respawn
#exec echo OARSUDP ran at `date` >> /var/log/oarsudp.log
script
sudo -u root /usr/bin/php -f /home/src/www-server/services/job_info_parser.php
end script
Если я пытаюсь запустить его, я получаю сообщение -
sudo service oarsudp start
oarsudp start/running, process 2604
Если я сразу проверяю состояние, я добираюсь -
sudo service oarsudp status
oarsudp stop/waiting
Я добавляю exec
строка для отправки комментария в журнал. Это только работает когда script
теги и его содержание комментируются.
Я выполнил строку PHP в теге script из командной строки, и это работает отлично, не бросая ошибок.
Я подтвердил, что полномочия корректны в /etc/init/
(пользовательский корень, корень группы, полномочия 644).
Я попытался менять имя сервиса, просто потому что я читал сообщение о некоторых конфликтующих именах, и я хватался за солому.
Кажется, что сервис пытается повторно метать икру, отсылая сообщение журнала в exec
несколько раз, прежде чем сервис умирает.
Я просто определил местоположение журналов Выскочки, и они заявляют -
"Не удалось открыть входной файл:/home/src/www-server/services/job_info_parser.php".
Я попытался изменить полномочия, группу и владельца, но ничто не работало.
Кто-либо когда-либо видел, что сервисный сценарий прекращает работать как это? Если так, какова была причина и как я могу зафиксировать ее? Или я - общий идиот, представив проблему в рамках сценария или сервиса сам?
Здесь я предполагаю, что это длительная задача типа демона; если это одноразовая задача «запустить и остановить», тогда вам понадобится ключевое слово «задача».
1) exec и script, насколько мне известно, взаимоисключающие; это два разных способа указать, что запускать для этого задания.
2) Я не вижу причин для sudo; upstart запускается от имени пользователя root, и вы можете использовать setuid / setgid для изменения пользователя / группы, выполняемой заданием, как если бы оно не было root.
Я подозреваю, что sudo сбивает с толку или скрывает то, что на самом деле происходит; upstart очень внимательно относится к отслеживанию идентификаторов запущенных задач. См. http://upstart.ubuntu.com/cookbook/#expect для некоторых кровавых подробностей; фактически, посмотрите на всю эту страницу некоторые возможные другие подсказки