У меня есть/etc/init.d сценарий, который запускает мой веб-сервер. Я сделал это исполняемым файлом и добавил его (update-rc.d webserver defaults
). Когда я выполняю сценарий из командной строки, это хорошо работает (./webserver
).
Но после перезагрузки моей системы не работает мой веб-сервер.
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd ~/projects/webserver
./.build/debug/webserver &
exit 0
Действительно ли пользовательский каталог является проблемой (я зарегистрирован как корень)?
Тип расширения тильды, который вы хотите, выполняется в отношении текущего пользователя оболочки. Например, когда вы входите в систему как root ~
, это /root
. Если сценарий запускается до входа в систему, то ~
не может быть расширен до нужного каталога.
Используйте полный путь к файлу в вашем скрипте.
Для дальнейшего использования, здесь - несколько полезных примеров использования расширения тильды в скриптах
.Хорошо в Вашем сценарии существует проблема. Когда Вы пишете, что сценарий лучше использует путь aboslute вместо тильда (~) . Это, мог быть преступник, который сделал сценарий неприменимым. Если Вы хотите изменить dir, дать полный путь как/home/scripts/projects/вместо ~ / проекты .It имеет намного больше значения.
Для достижения цели существует несколько путей. Будучи Главным Системным инженером, я использую другую методологию для достижения таких вещей, который зависит от ситуаций. Хорошо здесь я перечисляю некоторые из многих путей.
1) Основной способ, чем Вы связали и не успешно выполнились.
sudo su
chmod a+x /etc/init.d/webserver
update-rc.d webserver defaults
2) Добавляют задание крона в перезагрузках.
sudo su
crontab -e
@reboot /home/path/to/script.sh
3) Добавляют Ваши команды к rc.local файлу перед последней строкой выход 0 .
sudo su
nano /etc/rc.local
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd /absolute/path/projects/webserver
./.build/debug/webserver &