отладка /etc/init.d скриптов запуска в Ubuntu - PullRequest
5 голосов
/ 01 ноября 2011

Есть пользовательские опросы очереди сообщений dropr, которые я пытаюсь запустить через /etc/init.d в Ubuntu. Все 3 скрипта являются суперпростыми однострочными и отлично работают через командную строку, но по какой-то причине, только один из них действительно работает при загрузке сервера. У всех есть 775 перми, и это прекрасно работает:

sudo /etc/init.d/app-poller.sh 

Вот пример сценария (должен запускаться как пользователь www-data):

[/etc/init.d]$  cat /etc/init.d/app-poller.sh 
#!/bin/sh
su - www-data -c "bash -c '/path/to/dropr-server/daemons/app-poller.php'"

Я несколько раз запускал удаленные / повторно вводимые записи inittab через:

updates-rc.d -f app-poller.sh remove
updates-rc.d app-poller.sh defaults

Скрипт rcconf также говорит, что все запускается нормально. Я следовал всем инструкциям здесь: http://jonathonhill.net/2009-04-23/auto-start-a-shell-script-on-ubuntu-server/ здесь и здесь: http://stringofthoughts.wordpress.com/2009/04/16/adding-removing-shell-scripts-ubuntu-810/

И я искал вывод во всех обычных подозреваемых (/ var / log / messages, / var / log / daemons и т. Д.) ... по-прежнему без понятия.

Очень хотел бы хотя бы немного понять, почему это не удается. Кто-нибудь знает, на какие файлы журналов я могу ссылаться, чтобы увидеть, что идет не так и почему?

Ответы [ 4 ]

5 голосов
/ 19 июля 2013

Попробуйте вызвать init-скрипт при моделировании среды загрузки:

env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" /etc/init.d/your-daemon start 

Добавьте отладочный вывод в ваш скрипт, если вы не видите вывод этой команды.

4 голосов
/ 28 июля 2016

Я обнаружил, что в верхней части моего /etc/init.d/scriptname было добавлено следующее:

debug_me=true

if [[ $debug_me == true ]]; then

  # Close STDOUT
  exec 1<&-
  # Close STDERR
  exec 2<&-

  LOG_FILE=/home/myhome/scriptname.log

  # Open STDOUT as $LOG_FILE file for read and write.
  exec 1<>$LOG_FILE

  # Redirect STDERR to STDOUT
  exec 2>&1

  # Display shell commands with expanded args
  set -x

fi
1 голос
/ 22 октября 2014

Запустите его в под-оболочке с -x.

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

0 голосов
/ 01 ноября 2011

Попробуйте изменить:

su - www-data -c "bash -c '/path/to/dropr-server/daemons/app-poller.php'"

на:

/bin/su - www-data -c "/bin/bash -c '/path/to/dropr-server/daemons/app-poller.php'"

...