Почему скрипт выключения НЕ запускается?
Я установил скрипт выключения в системе 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=...
решает эту проблему.
Спасибо за помощь и вклад от всех!