Как запустить скрипт при запуске
на экземпляре amazon linux у меня есть два скрипта под названием start_my_app и stop_my_app которая запуск и остановка навсегда (который в свою очередь работает мой узел.приложение на JS). Я использую эти сценарии для ручного запуска и остановки моего приложения узла. Пока все хорошо.
моя проблема: я хочу настроить его так, что start_my_app запускается всякий раз, когда система загружается. Я знаю, что мне нужно добавить файл внутри init.d и я знаю, как символически связать его с соответствующим каталогом внутри rc.d, но не могу понять, что на самом деле нужно, чтобы войти в файл, который я помещаю в init.d. Я думаю, что это должна быть только одна строка, например, start_my_app, но это не работает для меня.
15 ответов:
в файле, который вы вставили
/etc/init.d/вы должны установить его исполняемый файл с:chmod +x /etc/init.d/start_my_appблагодаря @meetamit, если это не работает, вы должны создать символическую ссылку на
/etc/rc.d/ln -s /etc/init.d/start_my_app /etc/rc.d/обратите внимание, что в последнем Debian это не будет работать, поскольку ваш скрипт должен быть совместим с LSB (обеспечьте, по крайней мере, следующие действия: запуск, остановка, перезапуск, принудительная перезагрузка и статус): https://wiki.debian.org/LSBInitScripts
как Примечание, Вы должны поместите абсолютный путь вашего скрипта вместо относительного, это может решить неожиданные проблемы:
/var/myscripts/start_my_appи не забудьте добавить поверх этого файла:
#!/bin/sh
установите crontab для этого
#crontab -e @reboot /home/user/test.shпосле каждого запуска он будет работать тестовый скрипт.
простой подход заключается в добавлении строки в
/etc/rc.local:/PATH/TO/MY_APP &или если вы хотите запустить команду от имени root:
su - USER_FOOBAR -c /PATH/TO/MY_APP &(трейлинг амперсанд фон процесса и позволяет rc.локальный для продолжения выполнения)
если вы хотите полный сценарий инициализации, дистрибутив debian имеет файл шаблона, поэтому:
cp /etc/init.d/skeleton /etc/init.d/your_appи адаптировать его немного.
вот как я это делаю на системах red-hat
положить свой скрипт в
/etc/init.d, принадлежит root и исполняемый файл. В верхней части скрипта, вы можете дать поручениеchkconfig. Например, следующий сценарий используется для запуска приложения java в качестве пользователя oracle.имя скрипта
/etc/init.d/apex#!/bin/bash # chkconfig: 345 99 10 # description: auto start apex listener # case "" in 'start') su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";; 'stop') echo "put something to shutdown or kill the process here";; esacэто говорит о том, что скрипт должен работать на уровнях 3, 4 и 5 и приоритет для start/stop составляет 99 и 10.
затем, как пользователь root, вы можно использовать
chkconfigчтобы включить или отключить скрипт при запуске,chkconfig --list apex chkconfig --add apexи вы можете использовать сервис start / stop apex
другой вариант - иметь команду @reboot в вашем crontab.
Не каждая версия cron поддерживает это, но если ваш экземпляр основан на Amazon Linux AMI, то он будет работать.
просто добавьте строку в свой кронтаб..
убедитесь, что файл является исполняемым:
chmod +x /path_to_you_file/your_fileдля редактирования файла crontab:
crontab -eстрока, которую вы должны добавить:
@reboot /path_to_you_file/your_fileтак просто!
введите
cronиспользуяsudo:
sudo crontab -eдобавить команду для запуска при запуске, в этом случае скрипт:
@reboot sh /home/user/test.shсохранить:
нажмите ESC затем: x для сохранения и выхода, или нажмите ESC затем ZZ (это shift+zz)
Тест Тест Тест:
запустите тестовый скрипт без cron, чтобы убедиться, что это на самом деле завод.
убедитесь, что вы сохранили свою команду в cron, используйте
sudo crontab -eперезагрузите сервер, чтобы подтвердить, что все это работает
sudo @reboot
Вы можете сделать это :
chmod +x PATH_TO_YOUR_SCRIPT/start_my_appзатем используйте эту команду
update-rc.d start_my_app defaults 100пожалуйста, смотрите эту страницу на Cyberciti.
создайте свой собственный / init исполняемый файл
Это не то, что вы хотите, но это весело!
просто выберите произвольный исполняемый файл,даже shell-скрипт, и загрузить ядро с параметром командной строки:
init=/path/to/myinitк концу загрузки ядро Linux запускает первый исполняемый файл userspace по заданному пути.
несколько проектов обеспечивают популярность
initисполняемые файлы, используемые основными дистрибутивами, например systemd, и в большинстве дистрибутивов init будет разветвлять кучу процессов, используемых в нормальной работе системы.но мы можем захватить
/initэто для запуска наших собственных минимальных скриптов, чтобы лучше понять нашу систему.вот минимальная воспроизводимая настройка: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
для Debian 9 см. https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up. мне это помогло. Краткая версия для Debian 9: добавить команду (как root) в / etc / rc.местные
/path_to_file/filename.sh || exit 1 # Added by me exit 0вероятно,/path_to_file/filename.sh должно быть исполняемым (я так думаю).
абсолютный самый простой метод, если все, что вы хотите запустить, это простой скрипт (или что-то еще), если у вас есть графический интерфейс для использования system > preferences, а затем startup apps.
просто перейдите в сценарий, который вы хотите, и там вы идете. (сделать скрипт исполняемым)
этой простое решение работало для меня на экземпляре Amazon Linux под управлением CentOS. Отредактируйте свой
/etc/rc.d/rc.localфайл и поместите туда команду. В этом файле упоминается, что он будет выполнен после все остальные скрипты инит. Так что будьте осторожны в этом отношении. Вот как файл выглядит для меня в настоящее время.. Последняя строка-это имя моего скрипта.
- добавьте свой скрипт в /etc / init.д/ каталога
- обновите уровни запуска rc:
$ update-rc.d myScript.sh defaults NNгде NN-порядок, в котором он должен быть выполнен. 99 например будет означать, что он будет работать после 98 и до 100.
для некоторых людей это работает Вы можете просто добавить следующую команду в System > Preferences > Startup Applications:
bash /full/path/to/your/script.sh
Если вы хотите поставить запуск также вы можете использовать
прежде всего переместите свой скрипт / etc / init.d тогда chmod 777 / etc / init.d / имя вашего скрипта
после применения следующей команды
обновление-rc.d настройки скрипта по умолчанию удалять обновление-РЦ.d-f ваш скрипт удалить
при запуске вы можете увидеть, что ваше приложение будет работать.

Comments