Ubuntu 9.10: как устранить неполадки при запуске сценария, который, по-видимому, не запускается?

Я создал bash-скрипт 'foo'. Я сделал этот скрипт исполняемым с

chmod+x 

и добавил это запуск, запустив

sudo update-rc.d foo defaults 80

Несмотря на это, он не работает при запуске. Есть ли способ, чтобы мой сценарий отображал эхо-сообщения в журнале? Или есть какой-нибудь журнал, который бы записывал события / ошибки для этого?

Я чувствую, что летаю вслепую и не знаю, как с этим справиться.

По запросу, вот содержание моего скрипта:

#!/bin/bash
modprobe uinput
/home/dane/dev/mangler/run.sh /home/dane/dev/mangler/dane/keys.js

команда run.sh выполняет программу kbd-mangler.exe. При запуске следующего в gnome-терминале это работает:

~/$ sudo bash custom_keys.sh

5 ответов

Решение

В начале вашего сценария добавьте эту строку:

exec > /tmp/debug-my-script.txt 2>&1

Перезагружать. Теперь посмотрите на этот файл в /tmp - он должен рассказать вам, что происходит.

Кстати, в скриптах init.d я склонен использовать команды с полным путем (/sbin/modprobe). Меня столько раз сжигали ограниченные переменные PATH, которые использовались этими сценариями, поэтому я не делаю никаких предположений.:)

Кстати, хорошие ссылки для программирования на Bash:

http://mywiki.wooledge.org/BashFAQ

http://mywiki.wooledge.org/BashPitfalls

http://mywiki.wooledge.org/BashGuide

Посмотрите на logger команда.

Работает ли скрипт, если вы запускаете его с помощью sudo? Если скрипт настроен правильно, самая распространенная ошибка, которую я видел, связана с неправильной настройкой среды.

Например, хорошей практикой является либо задавать явно PATH в начале скрипта, либо использовать полный путь для любых команд, которые вы запускаете.

И действительно ли 80 уровень вам действительно нужен? Вы зависите от того, что еще не началось?

Достаточно ли проверяет ваш скрипт уровни ошибок вещей, которые вы запускаете, и затем отвечаете соответствующим образом. Хорошие сценарии и программирование требуют, чтобы вы внимательно следили за ошибками и обрабатывали их.

Положить немного echo status утверждений в ваш скрипт и внимательно следите за тем, как загружается ваша система. Использование логгера помогает, так как вы можете отправить вывод в системный журнал.

Вы можете добавить set -x до первой строки сценария и sleep 120 как последняя строка, а затем следите за ошибками. Это будет в основном отражать каждое утверждение, пока оно выполняется на вашем экране, а затем будет ждать пару минут, чтобы у вас была возможность прочитать и идентифицировать проблемы.

Просто чтобы добавить к тому, что было предложено.

Я также проверил бы, что символическая ссылка /etc/rc2.d/S80foo была создана и связана правильно. Если файл foo не существует, update-rc.d должен был выдать вам ошибку, но не повредит дважды проверить.

Вы можете использовать команду logger для добавления записей в файлы журнала:

logger -i "Foo Starting"
Другие вопросы по тегам