отладка сценариев запуска /etc/init.d в Ubuntu

Имейте настраиваемые средства опроса очереди сообщений 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/добавление-удаление-скриптов-оболочки-ubuntu-810/

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

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


person rICh    schedule 01.11.2011    source источник
comment
Еще две вещи, которые я пробовал (безуспешно): 1) изменил порядок каждого скрипта (пробовал по умолчанию [97,98 или 99] для каждого) 2) попытался изменить оболочку скриптов из bash -c '/path/ to/... к абсолютному пути sh: /bin/sh -c '/path/to/...   -  person rICh    schedule 01.11.2011


Ответы (4)


Я обнаружил, что добавление следующего в верхней части моего файла /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
person Chris Kerlin    schedule 28.07.2016
comment
Вам не хватает $ перед ссылкой на debug_me в строке 3 - person joseph_morris; 04.05.2018

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

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

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

person Rias A. Sherzad    schedule 19.07.2013

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

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

person Grasshopper    schedule 22.10.2014

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

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

to:

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

person Mike    schedule 01.11.2011
comment
Спасибо, Майк. Тот же результат - только мой скрипт запускается на уровне 97. Тот, что на 98, все еще не ... запуск его из sudo отлично работает с sudo nohup /etc/init.d/second-poller.php › /dev/null & - person rICh; 01.11.2011
comment
Помимо предложения использовать grep в каталоге /var/log для поиска dropr, я не знаю, что еще сказать. Подтвердите через ls, что правильные символические ссылки, которые вы ожидаете, действительно созданы для ваших скриптов S97, S98 и S99 (и то же самое для ваших скриптов K) в каталогах /etc/rc?.d/...? - person Mike; 01.11.2011