Как запустить скрипт при запуске

на экземпляре 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)

Тест Тест Тест Тест:

  1. запустите тестовый скрипт без cron, чтобы убедиться, что он на самом деле завод.

  2. убедитесь, что вы сохранили свою команду в cron, используйте sudo crontab -e

  3. перезагрузите сервер, чтобы подтвердить, что все работает 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 и поместите туда команду. В этом файле указано, что он будет выполнен после все остальные скрипты инит. Так что будьте осторожны в этом отношении. Вот как файл выглядит для меня в настоящее время.enter image description here. Последняя строка-название моего сценария.


  • добавьте свой скрипт в /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 ваш скрипт удалить

при запуске вы можете увидеть, что ваше приложение будет работать.