Мне нужно запустить такие службы, как 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