Как запустить скрипт при запуске
на экземпляре amazon linux у меня есть два скрипта под названием start_my_app
и stop_my_app
которые запускают и останавливают навсегда (который в свою очередь работает мой узел.приложение на JS). Я использую эти сценарии для ручного запуска и остановки приложения node. Пока все хорошо.
моя проблема: я также хочу настроить его таким образом, что 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.local для продолжения выполнения)
если вы хотите полный сценарий инициализации, дистрибутив debian имеет файл шаблона, поэтому:
cp /etc/init.d/skeleton /etc/init.d/your_app
и немного адаптировать его.
вот как я это делаю в Red-hat systems
поместите свой сценарий в /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, то он будет работать.
просто добавьте строку в свой crontab..
убедитесь, что файл является исполняемым:
chmod +x /path_to_you_file/your_file
для редактирования файла crontab:
crontab -e
строка, которую вы должны добавить:
@reboot /path_to_you_file/your_file
так просто!
Enter 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, а затем запуск приложений.
просто перейдите в сценарий, который вы хотите, и там вы идете. (сделать скрипт исполняемым)
этой простое решение работало для меня на экземпляре Amazon Linux под управлением CentOS.
Редактировать /etc/rc.d/rc.local
file и поместите туда команду. В этом файле указано, что он будет выполнен после все остальные скрипты инит. Так что будьте осторожны в этом отношении. Вот как файл выглядит для меня в настоящее время.. Последняя строка-название моего сценария.
- добавьте свой скрипт в /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 настройки скрипта по умолчанию удалять update-rc.d-f ваш скрипт удалить
при запуске вы можете увидеть, что ваше приложение будет работать.