Запуск скрипта при запуске на сервере AWS EC2 Ubuntu 1404

Запуск скрипта при запуске на сервере AWS EC2 Ubuntu 1404

Мне нужно запустить такие службы, как elasticsearch, kafka во время загрузки экземпляра EC2.

Я попробовал @reboot в crontab, но что-то пошло не так.

Скрипт оболочки:

#!/bin/sh

nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &

Запись в Crontab:

@reboot sh /home/abhijeet/startServices.sh

Я не знаю, где я ошибаюсь.

решение1

cronзапускает оболочки в измененной среде с минимальными PATHи, предположительно, /usr/binне присутствует там, поэтому /usr/bin/nohupне обнаруживается.

Ты можешь:

  • добавьте /usr/binв PATH, вместо того, чтобы изменять свой crontab, вам следует добавить это в верхнюю часть скрипта:

    #!/bin/sh
    export PATH="$PATH":/usr/bin
    nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    
  • Используйте абсолютный путь к nohup:

    #!/bin/sh
    /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    

Обратите внимание, что, согласно crontabзаписи, вы выполняете скрипт как аргумент sh( dash), имея при этом точно такой же shebang. В данном случае это не имеет значения, но будьте осторожны, если shebang отличается. Обычно скрипт делают исполняемым и используют shebang для указания нужного интерпретатора.


Сейчас,самая важная часть. cronзапускает все заданные задания в соответствующих им подоболочках и порождает эти подоболочки параллельно (неблокируя), т.е. запускает задания параллельно. Поэтому вам не нужны nohupи фоновые ( &), просто сделайте (на основе вашего примера, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearchявляется исполняемым):

@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch

Связанный контент