На экземпляре Amazon S3 Linux у меня есть два сценария под названием start_my_app и stop_my_app, которые запускают и останавливают эти скрипты (что, в свою очередь, запускает мое приложение Node.js). Я использую эти сценарии для ручного запуска и остановки моего приложения Node.js.
Моя проблема: я также хочу настроить их так, чтобы start_my_app запускался при каждой загрузке системы. Я знаю, что мне нужно добавить файл в init.d, и я знаю, как связать его симлинком с нужным каталогом в rc.d, но я не могу понять, что на самом деле должно быть внутри файла, который я помещаю в init.d. Я думаю, что это должна быть всего одна строка, например: start_my_app, но это у меня не работает.
Ответ 1
Установите для этого crontab:
#crontab -e
@reboot /home/user/test.sh
После каждого запуска системы будет запускаться тестовый сценарий.
Ответ 2
В файле, который вы поместили в /etc/init.d/, вы должны установить его исполняемым с помощью:
chmod +x /etc/init.d/start_my_app
Если это не работает, вам нужно создать символическую ссылку на /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
Ответ 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
Так я делаю в системах Red Hat Linux.
Поместите ваш скрипт в /etc/init.d, принадлежащий root. В верхней части скрипта вы можете задать директиву для chkconfig. Например, следующий скрипт используется для запуска Java-приложения от имени пользователя oracle. Название сценария /etc/init.d/apex:
#!/bin/bash
# chkconfig: 345 99 10
# Описание: автоматический запуск слушателя apex
#
case "$1" in
'start')
su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
'stop')
echo "вставьте сюда что-нибудь для выключения или уничтожения процесса";;
esac
Этот код говорит о том, что сценарий должен выполняться на уровнях 3, 4 и 5, а приоритет для запуска/остановки — 99 и 10.
Затем как пользователь root вы можете использовать chkconfig для включения или отключения скрипта при запуске:
chkconfig --list apex
chkconfig --add apex
И теперь можно использовать service start/stop apex.
Ответ 5
Создайте свой собственный исполняемый файл /init. Это не совсем то, что вам нужно, но это работает! Просто выберите произвольный исполняемый файл, например, сценарий оболочки, и загрузите ядро с параметром в командной строке:
init=/path/to/myinit
В конце загрузки ядро Linux запускает первый исполняемый файл пользовательского пространства по указанному пути. Несколько проектов предоставляют популярные исполняемые файлы init, используемые основными дистрибутивами, например, systemd, и в большинстве дистрибутивов init форкнет кучу процессов, используемых в нормальной работе системы.
Но мы можем использовать /init для запуска собственных минимальных скриптов, чтобы лучше понять нашу систему.
Вот минимальная воспроизводимая установка:
https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init.
Ответ 6
Во многих предыдущих ответах говорится о запуске чего-либо при загрузке, но часто вы хотите запустить его чуть позже, потому что ваш сценарий зависит, например, от работы сети. Используйте at, чтобы просто добавить эту задержку, например:
at now + 1 min -f /path/yourscript
Вы можете добавить это в /etc/rc.local, а также в cron, например:
# crontab -e
@reboot at now + 1 min -f /path/yourscript
Ответ 7
Вот более простой метод!
Во-первых, напишите сценарий оболочки и сохраните его в формате .sh. Вот пример:
#!/bin/bash
Icoff='/home/akbar/keyboardONOFF/icon/Dt6hQ.png'
id=13
fconfig=".keyboard"
echo "disabled" > $fconfig
xinput float $id
notify-send -i $Icoff "Internal Keyboard disabled";
Этот скрипт отключит внутреннюю клавиатуру при запуске.
Во-вторых, откройте приложение «Startup Application Preferences» (Параметры запуска приложений).
В-третьих, нажмите «Добавить».
В-четвертых, в разделе «Имя» задайте имя.
В-пятых, в разделе «Команда» перейдите к вашему .sh.
В-шестых, отредактируйте раздел «Команда» следующим образом:
bash <space> path/to/file/<filename>.sh <space> --start
В-седьмых, нажмите кнопку «Добавить». Вот и все! Готово!
Теперь подтвердите изменения, перезагрузив ваш ПК.
Ответ 8
Вы можете использовать микросервисы или оболочки Python 3; при использовании в Ubuntu Server 18.04 (Bionic Beaver) или Ubuntu 19.10 (Eoan Ermine), или Ubuntu 18.10 (Cosmic Cuttlefish):
Создайте микросервис, названный в моем случае «brain_microservice1.service»:
$ nano /lib/systemd/system/brain_microservice1.service
Выполните внутри этого сервиса, который был только что создан:
[Unit]
Description=brain_microservice_1
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices /microservice_1.py -k start -DFOREGROUND
ExecStop=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful-stop
ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful
PrivateTmp=true
LimitNOFILE=infinity
KillMode=mixed
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Предоставьте разрешения:
$ chmod -X /lib/systemd/system/brain_microservice*
$ chmod -R 775 /lib/systemd/system/brain_microservice*
Дайте разрешение на выполнение:
$ systemctl daemon-reload
Включите данную функцию, это заставит сервис всегда запускаться при запуске системы.
$ systemctl enable brain_microservice1.service
Затем вы можете протестировать его:
$ sudo reboot now
Готово!
Это может быть сделано с помощью любого скрипта для запуска shell, react... скрипта запуска базы данных... любого вида системного кода...
Linux