Вопрос или проблема
У меня есть несколько руководств о том, как запустить скрипт во время загрузки на сервере Ubuntu, но он постоянно завершается с ошибкой статус=203
Вот файл script.sh, который я написал в /etc/init.d :
### BEGIN INIT INFO
# Provides: Multicraft
# Required-Start:
# Required-Stop
# Should-Start:
# Should-Stop:
# X-Start-Before:
# X-Start-After:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive:
# Short-Description: Даемон Multicraft
# Description: Запускает демон Multicraft при загрузке системы
### END INIT INFO
. /home/minecraft/multicraft/bin/multicraft -v start
exit 0
Я также выполнил команду “sudo update-rc.d script.sh defaults”.
Может кто-нибудь сказать, что я делаю не так?
P.S. Следует отметить, что когда я вручную выполняю эту команду, программа запускается, и всё работает так, как ожидается:
sudo /home/minecraft/multicraft/bin/multicraft -v start
Попробуйте добавить задержку (sleep) в ваш скрипт.
sleep 60
./home/minecraft/multicraft/bin/multicraft -v start
exit 0
ИЛИ
sleep 60
cd /home/minecraft/multicraft/bin/
sudo ./multicraft -v start
exit 0
ИЛИ
sleep 60
cd /home/minecraft/multicraft/bin/
sudo multicraft -v start
exit 0
Пожалуйста, увеличьте время ожидания, если приведённый код не сработает (если вы являетесь пользователем root, нет необходимости использовать sudo).
Возможно, это дубликат вопроса “Программы автозагрузки” не работают
Хорошо, я нашел, в чем была проблема: я не написал #!/bin/sh в первой строке script.sh. И вот этот скрипт работает:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Multicraft
# Required-Start:
# Required-Stop
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Даемон Multicraft
# Description: Запускает демон Multicraft при загрузке системы
### END INIT INFO
start() {
./home/minecraft/multicraft/bin/multicraft -v start
}
stop() {
./home/minecraft/multicraft/bin/multicraft -v stop
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
esac
exit 0
Спасибо за вашу помощь @editinit.
Привет, мне нужна помощь, чтобы запустить программы screen с sudo и одну без sudo, как мне это сделать, если они не находятся в домашней библиотеке?
Ответ или решение
Для того чтобы скрипт запускался при старте системы на Ubuntu Server и не выдавал ошибку с кодом состояния 203, важно следовать определённым стандартам для инициализационных скриптов. Я вижу, что вы уже сделали несколько шагов, поскольку ваш первоначальный скрипт не содержал правильной shebang строки, и это, скорее всего, было источником проблемы.
Вот исправленный и рабочий пример скрипта, который должен помочь вам запустить вашу мультикафт-программу правильно:
-
Убедитесь, что в начале вашего скрипта добавлена строка
#!/bin/sh
— она указывает системе, какой интерпретатор использовать для выполнения скрипта. -
Используйте следующий код для вашего скрипта, который вы можете сохранить в
/etc/init.d/script.sh
:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Multicraft
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Multicraft daemon
# Description: Starts the Multicraft daemon at system startup
### END INIT INFO
start() {
sleep 60 # Это время ожидания гарантирует, что другие сервисы будут готовы
cd /home/minecraft/multicraft/bin/
sudo ./multicraft -v start
}
stop() {
cd /home/minecraft/multicraft/bin/
sudo ./multicraft -v stop
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
- Убедитесь, что вы добавили скрипт в систему инициализации, выполните команду:
sudo update-rc.d script.sh defaults
- Если вы хотите запускать другие программы с
screen
, можете создать отдельные скрипты для каждой задачи, следуя аналогичной структуре, но с различными именами. Пример использованияscreen
:
#!/bin/sh
### BEGIN INIT INFO
# Provides: MyScreenProgram
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: My program in screen
# Description: Runs my program in a screen session at startup
### END INIT INFO
start() {
sleep 60
sudo -u <your_user> screen -dmS mysession /path/to/your/program
}
stop() {
screen -S mysession -X quit
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
- После внесения изменений не забудьте сделать ваш скрипт исполняемым, выполнив:
sudo chmod +x /etc/init.d/script.sh
Таким образом, ваши скрипты будут корректно запускаться при старте системы, и вы сможете управлять ими с помощью стандартных серверных практик. Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь спрашивать.