Как запустить оболочку 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)
Тест Тест Тест:
-
Запустите тестовый скрипт без cron, чтобы убедиться, что он действительно работает.
-
Убедитесь, что вы сохранили свою команду в cron, используйте sudo crontab -e
-
Перезагрузите сервер, чтобы подтвердить, что все работает 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 удалить
при запуске вы можете увидеть, как ваше приложение запустится.