Мне нужна помощь с этим; бесконечный на бесконечный взгляд сценариев именно то же самое - но я не могу остановить работу, связанную со сценарием выскочки. Я использую любой из новейших образов Ubuntu Elestic AMI на EC2, и это происходит от микро до больших экземпляров.
Сначала передаю простую конфигурацию в /etc/init/node-monitor.conf
чтобы начать процесс:
description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"
Это сработало для запуска:
sudo start node-monitor
node-monitor start/running, process 1580
Но не останавливаясь:
sudo stop node-monitor
stop: Unknown instance:
Затем я попробовал что-то более сложное, основанное на другом проекте node.js:
description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
script
echo $$ > /var/run/node-monitor.pid
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"
end script
pre-stop script
rm /var/run/node-monitor.pid
end script
Но и это не сработало. Что в Сэме Хилле я делаю не так?
Итак, во-первых, выскочка бежит все jobs как root, поэтому вам не нужно sudo, избавьтесь от этого.
Во-вторых, может показаться, что ваша отслеживаемая программа завершается, отсюда и ошибка «неизвестный экземпляр». Вы должны получить что-то в / var / log / syslog, сообщающее вам, что процесс завершился. Вы можете добавить слово «респаун», и выскочка попытается запустить его снова, но если он продолжит быстро выходить, выскочка в конце концов сдастся.
Вы заканчиваете строку символом &, что означает «запускать это в фоновом режиме». Учитывая это, выскочка увидит, что ваша оболочка завершилась (поскольку управление заданиями неактивно в неинтерактивной оболочке, & будет эффективно демонизировать любые задания). Если вы хотите, чтобы выскочка продолжала работу этого процесса и могла его убить, отбросьте &.
Кроме того, ваше начало слишком явное, а ваша остановка основана на несуществующем событии. Вы можете просто начать на уровне выполнения [2345] и остановиться на уровне выполнения [^ 2345], и это поможет вашей работе лучше работать в более поздних выпусках по мере развития Ubuntu. Начиная с Ubuntu 11.10, это также означает, что он начнется после все сетевые интерфейсы работают, а не только eth0.
Еще интереснее то, что вы можете использовать строфу chdir, поэтому вам совсем не нужно использовать оболочку.
Итак, исходное задание лучше всего записать как:
start on runlevel [2345]
stop on runlevel [^2345]
respawn
chdir /home/ubuntu/node-monitor/run
exec /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1
Для получения бонусных баллов, когда выйдет Ubuntu 12.04, вы можете использовать новую функцию журнала консоли и удалить >> /var/log/node-monitor.log, хотя он будет писать в / var / log / upstart / node -monitor.log вместо этого.
И, наконец, настоящих «алестических» AMI больше нет. Эрик Хаммонд ведет таблицу тех же идентификаторов AMI, которые перечислены на https://cloud-images.ubuntu.com.. сравнить http://alestic.com к http://cloud-images.ubuntu.com/query/lucid/server/released.current.txt например.