У меня есть одна команда в моем скрипте /etc/rc.local
, которая должна запускать демон обновления для Tiny Tiny RSS во время запуска, но сценарий не выполняется во время запуска. Почему?
Весь файл /etc/rc.local:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet
exit 0
/etc/rc.local
является исполняемым:
# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local
/etc/init.d/rc.local
существует и является исполняемым:
# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27 2012 /etc/init.d/rc.local
/etc/init.d/rc.local
должен выполняться при запуске для этого уровня запуска:
# runlevel
N 2
# ls -l /etc/rc2.d/S99rc.local
lrwxrwxrwx 1 root root 18 Sep 22 2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local
Если я вручную вызываю /etc/rc.local из командной строки, загружается update_daemon. ..
# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
... что я должен помнить каждый раз, когда мой сервер перезагружается, пока эта проблема не будет устранена.
Подобные вопросы уже уже существуют, но до сих пор я не смог применить информацию в рамках моей конкретной проблемы.
Почему команда в rc.local не выполняется во время запуска?
Необходимо убедиться, что /etc/rc.local
выполняется во время запуска сервера с помощью команды:
sudo systemctl enable rc-local.service
Я однажды отредактировал rc.local
с помощью Блокнота в Windows, и у него появилась эта проблема.
В этом случае использование текстового редактора с поддержкой преобразования EOL, например Notepad ++, для преобразования стиля EOL в «Unix» может решить эту проблему.
Вы также можете сделать это с помощью :set ff=unix
в Vim.
У меня была похожая проблема в том, что rc.local не запускался при запуске.
sshades предоставил мне следующий ответ:
Ubuntu сейчас использует systemd, а rc.local теперь считается службой, которая по умолчанию отключена. Вы можете включить rc.local, введя следующую команду и перезагрузившись:
blockquote>sudo systemctl enable rc-local.service
https://askubuntu.com/a/770033/395498 [ 111]
blockquote>, хотя я не проверял его решение, я думаю, что это звучит логично и будет работать. Тем не менее:
Я также нашел решение, что добавление скрипта в ./.config/autostart-scripts/ сделает свое дело
У нас была эта проблема на некоторых хост-серверах, загружающих правила FW.
На этих полях они ОЧЕНЬ быстро перезагружаются, и мы обнаружили, что просто поместили «sleep 1» в rc.local до того, как операторы загрузки, похоже, решат проблему. Я думаю, что это дало немного времени для настройки интерфейсов перед загрузкой правил FW.
Убедитесь, что скрипт rc.local является исполняемым:
sudo chmod +x /etc/rc.local
Затем включите его:
sudo systemctl enable rc-local.service
Перезагрузите систему или запустите скрипт вручную, выполнив:
sudo systemctl start rc-local.service
Статус услуги можно отобразить, запустив:
$ sudo systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled)
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
Main PID: 2049 (svscanboot)
Tasks: 3
Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service
Сценарий rc.local
завершается, если при выполнении какой-либо из его команд возникает какая-либо ошибка (упомяните флаг -e
в #!/bin/sh -e
).
Возможно, что некоторые условия не выполняются, когда вы пытаетесь выполнить ваши команды, когда происходит rc.local
выполнение, поэтому выполнение вашей команды завершается неудачей.
Я столкнулся с тем же самым, когда вручную настраивал процессор и не делал этого в rc.local
. Вот мой пользовательский обходной путь, который использует update-rc.d
для запуска ваших команд при запуске:
myscript.sh
в каталоге /etc/init.d
с заголовком: #!/bin/sh
sudo chmod +x /etc/init.d/myscript.sh
sudo update-rc.d myscript.sh defaults
Также, Вы можете проверить /etc/network/if-up.d
сценарии и посмотреть, сможете ли вы запускать команды при запуске сети.
попробуйте sudo sysv-rc-conf
и проверьте, включен ли rc.local
rc.local [ ] [x] [x] [x] [x] [ ] [ ] [ ]
Я нашел в Ubuntu lxc контейнеры, что, если rc.local имеет совершенно корректную хижину, например,
#!/bin/sh
, он перестал работать, но если Вы удаляете хижину, он работает.
Не добрался до сути относительно того, почему или что окружает его использование, я думаю, что это бомбит на первом, ненулевом также. (В надлежащей хижине установок другой Ubuntu не проблема)