Почему скрипт выключения НЕ запускается?

Я установил скрипт выключения в системе Ubuntu, который не выполняется. Это экземпляр Amazon EC2. Я не уверен, что это связано с этим фактом, просто хотел указать на это.

Сценарий должен отправить некоторые файлы журнала в корзину Amazon S3, поэтому он должен выполняться при работающей сети.

Вот как я установил скрипт:

1) Создал файл в /etc/init.d/push-apache-logs-to-s3.sh с необходимыми командами.

2) Сделано это исполняемым с sudo chmod +x push-apache-logs-to-s3.sh

3) Выполнено sudo update-rc.d push-apache-logs-to-s3.sh start 0 0 .

Выход из вышесказанного составил:

update-rc.d: warning: /etc/init.d/push-apache-logs-to-s3.sh missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/push-apache-logs-to-s3.sh ...
   /etc/rc0.d/S00push-apache-logs-to-s3.sh -> ../init.d/push-apache-logs-to-s3.sh

Содержание /etc/rc0.d/ сейчас:

lrwxrwxrwx  1 root root   17 Jul 31  2012 K09apache2 -> ../init.d/apache2
lrwxrwxrwx  1 root root   29 Jun 16  2012 K10unattended-upgrades -> ../init.d/unattended-upgrades
lrwxrwxrwx  1 root root   26 Jun 16  2012 K15landscape-client -> ../init.d/landscape-client
lrwxrwxrwx  1 root root   19 Apr 10 11:11 K20memcached -> ../init.d/memcached
-rw-r--r--  1 root root  353 Jul 26  2012 README
lrwxrwxrwx  1 root root   35 Jul 10 12:01 S00push-apache-logs-to-s3.sh -> ../init.d/push-apache-logs-to-s3.sh
lrwxrwxrwx  1 root root   18 Jun 16  2012 S20sendsigs -> ../init.d/sendsigs
lrwxrwxrwx  1 root root   17 Jun 16  2012 S30urandom -> ../init.d/urandom
lrwxrwxrwx  1 root root   22 Jun 16  2012 S31umountnfs.sh -> ../init.d/umountnfs.sh
lrwxrwxrwx  1 root root   20 Jun 16  2012 S35networking -> ../init.d/networking
lrwxrwxrwx  1 root root   18 Jun 16  2012 S40umountfs -> ../init.d/umountfs
lrwxrwxrwx  1 root root   20 Jun 16  2012 S60umountroot -> ../init.d/umountroot
lrwxrwxrwx  1 root root   14 Jun 16  2012 S90halt -> ../init.d/halt

Когда я вручную выполняю сценарий с sudo ./push-apache-logs-to-s3.sh, это делает намеченную работу.

Эти сценарии выполняются root? Что мне не хватает?

3 ответа

Вы хотите, чтобы скрипт работал при выключении. Заменить старт с останова следующим образом:

sudo update-rc.d push-apache-logs-to-s3.sh stop 0 0 .

Обратите внимание, что вместо S будет добавлено K

Каково ожидаемое поведение при установке сценария для запуска на S00? У меня нет сценариев с S00 в моей системе может потребоваться минимум 1? Вы также явно не устанавливали start/stop, возможно, это вызывает проблемы. На всякий случай попробуйте

sudo update-rc.d push-apache-logs-to-s3.sh start 01 2 3 4 5 . stop 01 0 1 6 .  

Если это по-прежнему не работает, пожалуйста, обновите ваш вопрос, указав, кто ваш скрипт (или хотя бы его заголовки), возможно, что-то там не так.


РЕДАКТИРОВАТЬ

Увидев сценарий, который вы разместили в своем другом вопросе, я вижу две возможные проблемы. Во-первых, у вас есть пробел в строке !# /bin/sh вместо #!/bin/sh,

Что более важно, почему вы используете sh вместо bash? sh не поддерживается source, не говоря уже о . в качестве псевдонима для источника. Измените ваш скрипт для запуска с bash вместо этого это должно исправить это. На самом деле я не понимаю, почему это работает, когда вы запускаете его вручную, . должен выдать ошибку:

$ sh
$ source foo
sh: 1: source: not found
$ bash
$ source foo
bash: foo: No such file or directory

Поцарапайте это, я был неправ, как заметил @gnp, dash действительно поддерживает .,

Корень проблемы в том, что s3cmd не может прочитать его конфигурационный файл. По какой-то неизвестной мне причине, во время изменения уровня выполнения (0), когда init выполняет init-скрипты, по-видимому, root пользователь, который запускает эти скрипты, не считается "настоящим" пользователем, поэтому у него нет "домашнего" каталога, откуда s3cmd пытается прочитать конфиг.

Явное указание местоположения файла конфигурации с помощью --config=... решает эту проблему.

Спасибо за помощь и вклад от всех!

Другие вопросы по тегам