Как запустить оболочку script при запуске

В экземпляре Amazon Linux у меня есть два сценария, называемые start_my_app и stop_my_app которые запускаются и останавливаются навсегда (что, в свою очередь, запускает мое приложение node.js). Я использую эти сценарии, чтобы вручную запускать и останавливать приложение моего узла. Все идет нормально.

Моя проблема: я также хочу настроить его так, чтобы start_my_app запускался всякий раз, когда система загружается. Я знаю, что мне нужно добавить файл в init.d и я знаю, как создать символическую ссылку на соответствующий каталог в rc.d, но не могу понять, что на самом деле нужно поместить в файл, который я init.d в init.d, Я думаю, что это должна быть только одна строка, вроде start_my_app, но это не работает для меня.

Ответ 1

В файле, помещенном в /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 это не будет работать, поскольку ваш script должен быть совместимым с LSB (обеспечить, по крайней мере, следующие действия: запуск, остановка, перезагрузка, принудительная перезагрузка и состояние): https://wiki.debian.org/LSBInitScripts

В качестве примечания вы должны поместить абсолютный путь вашего script вместо относительного, он может решить неожиданные проблемы:

/var/myscripts/start_my_app

И не забудьте добавить поверх этого файла:

#!/bin/sh

Ответ 2

Установите для этого crontab

#crontab -e
@reboot  /home/user/test.sh

после каждого запуска он запускает тест script.

Ответ 3

Простой подход - добавить строку в /etc/rc.local:

/PATH/TO/MY_APP &

или если вы хотите запустить команду как специальный пользователь:

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(конечный амперсанд окружает процесс и позволяет rc.local продолжить выполнение)

Если вам нужен полный скрипт инициализации, в дистрибутиве Debian есть файл шаблона, поэтому:

cp /etc/init.d/skeleton /etc/init.d/your_app

и немного его адаптировать.

Ответ 4

Так я делаю это в системах красных шляп

Поместите свой script в /etc/init.d, принадлежащий root и исполняемому файлу. В верхней части script вы можете указать директиву для chkconfig. Например, следующий script используется для запуска приложения Java как пользовательского оракула.

Название script - /etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# description: auto start apex listener
#
case "$1" 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

это говорит о том, что script должен выполняться на уровнях 3, 4 и 5, а приоритет для запуска/остановки - 99 и 10.

то в качестве пользователя root вы можете использовать chkconfig для включения или отключения script при запуске,

chkconfig --list apex
chkconfig --add apex

и вы можете использовать начало/остановку обслуживания

Ответ 5

Введите 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

Ответ 6

Просто добавьте строку в свой crontab..

Убедитесь, что файл выполним:

chmod +x /path_to_you_file/your_file

Чтобы отредактировать файл crontab:

crontab -e

Строка, которую вы должны добавить:

@reboot  /path_to_you_file/your_file

Это просто!

Ответ 7

Другой вариант - иметь команду @reboot в вашем crontab.

Не каждая версия cron поддерживает это, но если ваш экземпляр основан на AMI Amazon Linux, он будет работать.

Ответ 8

Вы можете сделать это:

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

затем используйте эту команду

update-rc.d start_my_app defaults 100

Пожалуйста, смотрите эту страницу на Cyberciti.

Ответ 9

Создайте собственный/init-исполняемый файл

Это не то, что вы хотите, но это весело!

Просто выберите произвольный исполняемый файл даже оболочку script и загрузите ядро ​​с параметром командной строки:

init=/path/to/myinit

К концу загрузки ядро ​​Linux запускает первый исполняемый файл пользовательского пространства по заданному пути.

Несколько проектов предоставляют популярные исполняемые файлы init, используемые основными дистрибутивами, например. systemd, и в большинстве дистрибутивов init будет вызывать кучу процессов, используемых при нормальной работе системы.

Но мы можем захватить /init его, чтобы запустить наши собственные минимальные скрипты, чтобы лучше понять нашу систему.

Вот минимальная воспроизводимая настройка: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

Ответ 10

Это простое решение для меня работало на экземпляре Amazon Linux под управлением CentOS. Отредактируйте файл /etc/rc.d/rc.local и поместите там команду. В этом файле упоминается, что он будет выполнен после всех других скриптов инициализации. Поэтому будьте осторожны в этом отношении. Вот как выглядит файл в настоящее время. введите описание изображения здесь. Последняя строка - это имя моего script.

Ответ 11

Для Debian 9 см. https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up. Мне это помогло. Краткая версия для Debian 9: добавьте команды (от имени root) в /etc/rc.local

/path_to_file/filename.sh ||  exit 1   # Added by me
exit 0

Возможно, /path_to_file/filename.sh должен быть исполняемым (я так думаю).

Ответ 12

Абсолютно простой метод, если все, что вы хотите запустить, - это простой script (или что-то еще), если у вас есть gui, чтобы использовать системные > настройки, а затем запускать приложения.

просто перейдите к script, который вы хотите, и там вы идете. (выполнить script исполняемый файл)

Ответ 13

  • Добавьте каталог script в каталог /etc/init.d/
  • Обновите уровни запуска rc: $ update-rc.d myScript.sh defaults NN где NN - это порядок, в котором он должен выполняться. 99, например, будет означать, что он будет запущен после 98 и до 100.

Ответ 14

В Lubuntu мне пришлось столкнуться с противоположной ситуацией. Skype запускается после загрузки, и я нашел в ~/.config/autostart/ файл skypeforlinux.desktop. Содержание файла выглядит следующим образом:

[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true

Удаление этого файла помогло мне.

Ответ 15

Безболезненный, самый простой и универсальный метод - просто выполнить его с помощью ~.bash_profile или ~.profile (если у вас нет файла bash_profile).

Просто добавьте команду выполнения внизу этого файла, и она будет выполнена при запуске системы.

У меня есть этот пример внизу; ~\Desktop\sound_fixer.sh

Ответ 16

для некоторых людей это будет работать Вы можете просто добавить следующую команду в System > Preferences > Startup Applications:

bash /full/path/to/your/script.sh

Ответ 17

если вы хотите поставить старт, вы также можете использовать

прежде всего переместите ваш script/etc/init.d, затем chmod 777/etc/init.d/your script имя

после применения следующей команды

update-rc.d ваш script по умолчанию Удалить update-rc.d -f script удалить

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