Неудача при запуске скрипта при старте (сервер Ubuntu)

Вопрос или проблема

У меня есть несколько руководств о том, как запустить скрипт во время загрузки на сервере 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 строки, и это, скорее всего, было источником проблемы.

Вот исправленный и рабочий пример скрипта, который должен помочь вам запустить вашу мультикафт-программу правильно:

  1. Убедитесь, что в начале вашего скрипта добавлена строка #!/bin/sh — она указывает системе, какой интерпретатор использовать для выполнения скрипта.

  2. Используйте следующий код для вашего скрипта, который вы можете сохранить в /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
  1. Убедитесь, что вы добавили скрипт в систему инициализации, выполните команду:
sudo update-rc.d script.sh defaults
  1. Если вы хотите запускать другие программы с 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
  1. После внесения изменений не забудьте сделать ваш скрипт исполняемым, выполнив:
sudo chmod +x /etc/init.d/script.sh

Таким образом, ваши скрипты будут корректно запускаться при старте системы, и вы сможете управлять ими с помощью стандартных серверных практик. Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...