Запустить sh-файл при запуске экземпляра Amazon EC2

Запустить sh-файл при запуске экземпляра Amazon EC2

У меня есть файл «sh», который запускает сервер узлов.

Это работает хорошо, если я бегу

sh /var/www/init_node.sh

Я хочу, чтобы скрипт запускался каждый раз при перезапуске моего экземпляра (чтобы у меня был запущен и работал сервер узла).

Я добавил скрипт в свой файл /etc/rc.local следующим образом:

sh /var/www/init_node.sh 
exit 0

Однако, когда я перезапускаю экземпляр, сервер nodejs не работает. Это экземпляр Ubuntu 64.

Я думаю, это не важно, но вот содержимое моего sh-файла:

cd /var/www/myproject
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa
git stash
git pull origin master --force
forever start express.js 

Также

sh /etc/rc.local 

работает отлично

Есть идеи?

решение1

У меня была похожая проблема с файлом rc.local на экземпляре amazon. Оказалось, что у меня была ошибка со скриптом в rc.local, которая не позволяла ему выполняться, если у меня не было tty.

Итак, как узнать, получаете ли вы подобную ошибку? Используйте cloud-init для выполнения вашего скрипта.

Для моего дистрибутива Amazon Linux я сначала отредактировал /etc/init.d/cloud-init-user-scripts.

Изменить эту строку /usr/bin/cloud-init-run-module once-per-instance user-scripts execute run-parts ${SCRIPT_DIR} >/dev/null && success || failure

ТО "всегда"

/usr/bin/cloud-init-run-module always user-scripts execute run-parts ${SCRIPT_DIR} >/dev/null && success || failure

Затем создайте каталог mkdir /var/lib/cloud/data/scripts.. Теперь скопируйте ваш скрипт, который вы хотите, чтобы он выполнялся при запуске, в /var/lib/cloud/data/scripts. Убедитесь, что бит выполнения вашего скрипта установлен.

Теперь вы сможете выполнить sudo /etc/init.d/cloud-init-user-scripts start... Затем вы можете проверить /var/log/cloud-init.logналичие ошибок.

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