Как добавить скрипт в автозагрузку linux


Автозапуск пользовательских скриптов при инициализации системы – oss-it

Иногда пользователи могут столкнуться с необходимостью добавления каких-то сервисов или событий в автозагрузку Linux системы (Ubuntu, Debian, CentOS, Gentoo, Alpine Linux и так далее), но не всегда удается сделать это встроенным в графическую среду средствами (например Startup Applications в Ubuntu). То, как сделать простой скрипт и добавить его запуск при инициализации системы будет рассказано ниже.

Опишем это на простом примере: opendchub – это сервис dc-хаба, который может запускаться только под супер-пользователем (то есть он запускается вручную только командой sudo opendchub или непосредственно под root’ом).

Для начала создадим скрипт запуска в стандартном каталоге инициализации системы:

sudo nano /etc/init.d/odchub

В текстовом редакторе введите три строки будущего скрипта:

#!/bin/bash
echo "Opendchub starting..."
opendchub

Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X)
В первой строке этого скрипта указывается интерпретатор (если вы не знакомы с этим понятием, то лучше оставить именно такой как указан выше).
Во второй строке, командой echo обеспечивается простой вывод на экран текста – в принципе эта строка необязательна, она лишь будет информировать пользователя о том, какое действие происходит в данный момент.
Третьей строкой собственно указывается команда запуска (в нашем примере – это сервис opendchub) – пишется тут всё точно также, как вы выполняли необходимую команду в терминале, за исключением того, что не надо добавлять ‘sudo‘ – так как этот скрипт будет выполняться при инициализации системы, то есть уже сразу под суперпользователем.

После того как файл создан, сделаем его исполняемым:

sudo chmod +x /etc/init.d/odchub

Теперь добавим созданный скрипт к автозагрузке. Для этого есть несколько способов, опишем два наиболее встречающихся.

Если вывод команды:

ps -p 1 -o comm=

в вашем дистрибутиве покажет “systemd”, то рекомендуем создать systemd unit, в других случаях стоит прибегнуть ко второму описаному решению, init.
Systemd и init – это разные системы инициализации, используемые в Linux. Изначально массово использовалась init, но последние годы во всё большем количестве дистрибутивов используется systemd. Стоить добавить, что это не единственные системы инициализации, но как правило большинство из них поддерживают синтаксис init.


Systemd

Перед тем как добавить наш сценарий в автозагрузку при использовании системы инициализации systemd, потребуется создать соответствующий файл описания (так называемый “юнит”, являющийся прямой инструкцией системной службы):

sudo nano /etc/systemd/system/odchub.service

В текстовом редакторе скопируйте следующие строки в этот файл:

[Unit]
Description=Opendchub service
After=network.target
[Service]
ExecStart=/etc/init.d/odchub
[Install]
WantedBy=multi-user.target

Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X).
Description – заполняентся произвольно, это просто описание юнита.
After=network.target – означает, что эта служба сможет быть запущена только после поднятия сетвых сервисов.
ExecStart – путь к исполняемому файлу, будет выполнять при старте службы.
WantedBy=multi-user.target – означает, что будущий сервис будет запускаться после активации цели multi-user.target (примерно тоже самое что runlevel 3 в init).
Более подробно о возможностях systemd можно прочесть здесь или здесь.

После сохранения файла юнита вы можете использовать созданную службу odchub, например, стартовать (единократно выполнить написанный нами скрипт):

sudo systemctl start odchub

А этой командой вы “включите”, то есть добавите в автозагрузку системы:

sudo systemctl enable odchub

Для удаления созданной таким образом службы, достаточно пары команд:

sudo systemctl disable odchub
sudo rm /etc/systemd/system/odchub.service


Init

После того как создан исполняемый скрипт в соответствующей директории (в нашем случае /etc/init. d/odchub), для включения его при загрузках системы, достаточно выполнить команду:

sudo update-rc.d odchub defaults 90

Числовое значение после слова defaults указывает на приоритет для старта этого скрипта.

В результате этих действий сервис opendchub будет запускаться еще до загрузки графической среды, сразу вместе с инициализацией операционной системой. Если вы захотите удалить этот скрипт из автозагрузки, то перед тем как удалить сам файл надо выполнить такую команду:

sudo update-rc.d -f odchub remove


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

linux - Debian автозагрузка скрипта

Есть скрипт /root/project/test Добавил файл запуска в /etc/init.d/test:

#!/bin/sh #/etc/init.d/test ### BEGIN INIT INFO # Provides: test # Required-Start: $remote_fs $newtwork # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: test app # Description: The test. ### END INIT INFO touch /root/projects/test exit 0 

Зделал reboot но скрипт не запускается!?

  • linux
  • debian

3

Существуют несколько способов сделать автозапуск программ в Linux. За автозагрузку отвечает файл /etc/rc.local как раз название говорит о само за себя, имеется ввиду локальный файл для администратора что бы не лезть в глубь системы, это более простой и универсальный способ. Чаще всего его вполне достаточно и не нужно изобретать велосипед.

root@ ~ # cat /etc/rc.local<br> /usr/local/ispmgr/sbin/eximquota<br> /usr/local/ispmgr/sbin/ihttpd ip 1500<br> /root/antiddos/restorefw.sh<br> 

Добавление скрипта в автозагрузку:

update-rc.d имя_в_initd defaults 

Удаление скрипта из автозагрузки:

update-rc.d имя_в_initd remove 

2

Посмотри файл

/etc/init. d/skeleton

В ранних версиях там описанно всё внутри этого файла. Нужно только исправить на своё.

В версиях Jessie и младше набор необходимых функций определен в /lib/init/init-d-script. Для Вашего сервиса нужно переопределить переменную DAEMON.

Вам нужно реализовать, минимум, чтоб работала функция start.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

linux - Как запустить сценарий оболочки при запуске

спросил

Изменено 6 месяцев назад

Просмотрено 1,3 млн раз

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

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

  • Linux
  • node.js
  • init.d
  • навсегда

3

Сначала создайте сценарий запуска @ /home/user/startup.sh и сделайте его исполняемым

 chmod +x /home/user/startup.sh 

Затем установите для него crontab:

 $ crontab -e @reboot /home/user/startup.sh 

Теперь ваш скрипт startup. sh будет запускаться при каждом запуске.

14

Файл, который вы поместили в /etc/init.d/ , должен быть установлен как исполняемый с помощью:

 chmod +x /etc/init.d/start_my_app 

Как указал @meetamit, если он по-прежнему не запускается, вам может потребоваться создать символическую ссылку на файл в /etc/rc.d/

 ln -s /etc/init.d/start_my_app/ и т.д./rc.d/ 

Обратите внимание, что в последних версиях Debian это не будет работать, так как ваш сценарий должен быть совместим с LSB (предусмотрите как минимум следующие действия: запуск, остановка, перезапуск, принудительная перезагрузка и состояние): https://wiki.debian.org/LSBInitScripts

Обратите внимание: вы всегда должны использовать абсолютный путь к файлам в своих скриптах вместо относительного, это может решить непредвиденные проблемы:

 /var/myscripts/start_my_app 

Наконец, убедитесь, что вы включили шебанг поверх файла:

 #!/bin/sh 

13

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

 /PATH/TO/MY_APP & 

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

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

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

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

 cp /etc/init.d/skeleton/ и т.д./init.d/ваше_приложение 

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

6

Так я делаю в системах Red Hat Linux.

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

Имя сценария /etc/init.d/apex

 #!/bin/bash # chkconfig: 345 99 10 # Описание: автозапуск apex listener # случай "$1" в 'Начало') su - oracle -c "cd /opt/apex; java -jar apex. war > logs/apex.log 2>logs/apex_error.log &";; 'останавливаться') echo "поставьте что-нибудь, чтобы остановить или убить процесс здесь";; эсак 

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

Затем, как пользователь root , вы можете использовать скрипт при запуске:

 chkconfig --list apex chkconfig --добавить вершину 

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

2

Введите cron , используя sudo :

sudo crontab -e

Добавить команду для запуска при запуске, в данном случае скрипт:

@reboot sh /home/user/test.sh

Сохранить:

5 Нажмите ESC затем :x, чтобы сохранить и выйти, или нажмите ESC, затем ZZ (это Shift+zz)

Test Test Test :

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

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

  3. Перезагрузите сервер, чтобы убедиться, что все работает sudo @reboot

4

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

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

 chmod +x /path_to_you_file/your_file 

Для редактирования файла crontab:

 crontab -e 

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

 @reboot /path_to_you_file/your_file 

Это просто!

2

Другим вариантом является наличие команды @reboot в вашем crontab.

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

Отредактируйте файл rc.local с помощью редактора nano или gedit и добавьте в него свои сценарии. Путь к файлу может быть /etc/rc.local или /etc/rc.d/rc.local .

 судо нано /etc/rc.local 

Это редактирование:

 #!/bin/sh /путь-к-вашему-сценарию/имя-вашего-сценария.sh 

после завершения нажмите ctrl+o для обновления, нажмите Введите затем ctrl+x .

Сделать файл исполняемым.

 судо chmod 755 /etc/rc.local 

Затем инициируйте службу rc-local для запуска сценария во время загрузки.

 sudo systemctl запустить rc-local 

0

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

 chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

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

 update-rc.d start_my_app по умолчанию 100 

См. эту страницу на Cyberciti.

1

Много ответов о запуске чего-то при загрузке, но часто вы хотите запустить это немного позже, потому что ваш скрипт зависит, например, от. сети. Используйте на , чтобы просто добавить эту задержку, например:

 сейчас + 1 мин -f /path/yourscript 

Вы можете добавить это в /etc/rc.local, а также в cron , например:

 # crontab -e @reboot сейчас + 1 мин -f /path/yourscript 

Разве не забавно совмещать cron и at? Информация находится на справочной странице man at .

Что касается комментариев о том, что @reboot может не поддерживаться широко, просто попробуйте. Я обнаружил, что /etc/rc.local устарел в дистрибутивах, поддерживающих systemd, таких как ubuntu и raspbian.

1

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

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

2

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

0

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

Это не то, что вам нужно, но это весело!

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

 init=/путь/к/myinit 

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

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

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

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

Я ссылался на этот блог, всегда хороший выбор

https://blog.xyzio.com/2016/06/14/setting-up-a-golang-website- to-autorun-on-ubuntu-using-systemd/

vim /lib/systemd/system/gosite.service

 Description=Простой веб-сайт ConditionPathExists=/home/user/bin/gosite [Услуга] Перезапустить = всегда Рестартсек=3 ExecStart=/home/user/bin/gosite [Установить] WantedBy=многопользовательская.цель 
 systemctl включить gosite.service 

несколько способов закончить это:

  1. crontab
  2. rc.local
  3. иници.д
  4. системад

1

Для 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 || выход 1 # Добавлено мной выход 0 

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

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

 [Desktop Entry] Имя=Скайп для Linux Комментарий=Skype Интернет-телефония Exec=/usr/bin/skypeforlinux Значок = скайпфорлинукс Терминал=ложь Тип = Приложение StartupNotify=ложь X-GNOME-Autostart-enabled=true 

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

Вот более простой способ!

Сначала: напишите сценарий оболочки и сохраните его в формате .sh вот пример

 #!/bin/bash icoff='/home/akbar/keyboardONOFF/icon/Dt6hQ. png' идентификатор = 13 fconfig=".клавиатура" эхо "отключено" > $fconfig xinput $id с плавающей запятой notify-send -i $Icoff "Внутренняя клавиатура отключена"; 

этот скрипт отключит внутреннюю клавиатуру при запуске.

Второй: Откройте приложение «Настройки запуска приложения»

введите здесь описание изображения

введите здесь описание изображения

Третье: нажмите Добавить. четвертое: в разделе ИМЯ дайте имя. пятое: в разделе команд перейдите к вашему .sh . шестое: отредактируйте свой раздел команд следующим образом:

 bash <пробел> путь/к/файлу/<имя файла>.sh <пробел> --start 

седьмой: нажмите кнопку Добавить. Вот и все! Законченный!

Теперь подтвердите, перезагрузив компьютер.

ура!

1

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

0

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

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

У меня это внизу пример; ~\Рабочий стол\sound_fixer.sh

1

Работа с микросервисами или оболочкой Python 3; используя Ubuntu Server 18.04 (Bionic Beaver), Ubuntu 19.10 (Eoan Ermine) или Ubuntu 18.10 (Cosmic Cuttlefish).0015 всегда тоже:

  1. Создание микросервиса с именем p пример "brain_microservice1.service" в моем случае:

     $ нано /lib/systemd/system/brain_microservice1.service 
  2. Внутри этой новой службы, в которой вы находитесь:

     [Единица измерения] Описание=brain_microservice_1 After=multi-user. target [Услуга] Тип=простой 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 грациозно-стоп ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k изящный PrivateTmp=истина LimitNOFILE=бесконечность KillMode=смешанный Перезапуск = при сбое Рестартсек=5с [Установить] WantedBy=многопользовательская.цель 
  3. Дайте разрешения:

     $ chmod -X /lib/systemd/system/brain_microservice* $ chmod -R 775 /lib/systemd/system/brain_microservice* 
  4. Затем дайте разрешение на выполнение:

     $ системная перезагрузка демона 
  5. Включите, это заставит всегда запускаться при запуске

     $ systemctl включить brain_microservice1.service 
  6. Тогда вы можете проверить это;

    $ sudo перезагрузить сейчас

  7. Готово = УСПЕХ!!

Это можно сделать с помощью того же сценария тела, чтобы запустить оболочку, реагировать. .. сценарий запуска базы данных... любой код операционной системы... надеюсь, что это поможет вам...

...

Для некоторых людей, это будет работать:

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

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

3

linux - Как я могу запустить этот скрипт автоматически при запуске

спросил

Изменено 5 лет, 10 месяцев назад

Просмотрено 6к раз

У меня есть игровой сервер на моем VPS, но у меня сильная проблема. При перезагрузке (по техническим причинам или что-то в этом роде) игровой сервер не запускается автоматически. Я использую этот скрипт, который находится в /home/steam/csgo-ds:

 #!/бин/ш ln -s /home/steam/csgo-ds/csgo/*.dem /var/www/html/ ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock cd /home/steam/csgo-ds chmod 777 * -R screen -S "CS:GO Server" ./srcds_run -game csgo -usercon +game_type 0 +game_mode 0 -tickrate 64 -maxplayers 24 -maxplayers_override 24 +ip 188.116.46.148 -port 27015 +sv_setsteamaccount "XXXXX" -exec server.cfg +tv_enable 1 +tv_maxclients 0 +tv_port 27020 +tv_advertise_watchable 0 +карта jb_dust2_final2 

Я пытался добавить его в crontab, файлы запуска и многое другое, но ничего не получилось. Операционная система на VPS — Ubuntu Server 64-bit 14.04, обновленная до 16.04

  • linux
  • bash
  • ubuntu
  • cron
  • разработка игр

1

Ubuntu 16.04 использует systemd в качестве системы инициализации. Выполните следующие действия:

 chmod 744 /path/to/script 

Теперь создайте юнит-файл:

 vim /etc/systemd/system/csgo. 

Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: