- Управление автозагрузкой сервисов и скриптов в Linux
- Systemd: управление автозагрузкой служб в Linux
- Добавление сервиса в systemd
- Удаление сервиса из systemd
- Systemd: маскировка юнитов
- Автозапуска скриптов и сервисов с помощью rc.local
- Создание собственного демона и добавление его в systemd
- Автозапуск через cron
- .bashrc: автозапуск скриптов при запуске терминала
- Ubuntu, CentOS – Enable or Disable Service Autostart in Linux
- Ubuntu-18.04
- Ubuntu-14.04
- CentOS-7
- CentOS-6
- How to Enable or Disable Services in Ubuntu Systemd/Upstart
- How to enable and disable services in Systemd init
- How to remove Systemd services completely
- How to enable and disable services in Upstart init
- To enable a service in Upstart init
- To disable a service in upstart init
- Sysv-rc-conf tool
- Jobs-Admin tool
- How to enable and disable services in SysV init
- Read Also:
- More Articles You May Like
- 8 Comments. add one
Управление автозагрузкой сервисов и скриптов в Linux
В данной статье мы рассмотрим основы управлением автозагрузкой сервисов и скриптов в Linux CentOS 7/8. В частности, разберем основы работы с демоном systemd, научимся добавлять в автозагрузку сервисы и убирать их оттуда, а также рассмотрим альтернативные варианты запуска скриптов или демонов после старта системы.
Задача статьи – научить вас быстро разобраться со списками служб и скриптов которые запускаются в Linux автоматически, добавить в автозагрузку свои службы или скрипты, или отключить автозапуск определённых программ.
Systemd: управление автозагрузкой служб в Linux
В большистве популярных современных популярных дистрибутивов Linux (CentOS 7, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.d используется systemd. Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.
Для управления system используется команда systemctl.
Для начала, после загрузки системы, мы проверим список юнитов, которые в данный момент добавлены в systemd:
Список unit-файлов можно получить командой:
Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).
Чтобы вывести список активных сервисов и их состояние, выполните:
# systemctl list-units -t service
Следующая команда выведет список юнитов, которые загрузил или пытался загрузить systemd. Так как после запуска некоторые юниты могут стать неактивными, с помощью флага —all вы получите полный список.
# systemctl list-units —all
Как видим из списка, здесь отображаются даже сервисы, которые не были найдены на диске «not-found».
Использую данную команду, вы можете добавить и другие флаги, например:
- —state — используется для определения состояния демона Load, Active, Sub
- —type — позволяет фильтровать юниты по их типу.
systemctl list-units —all —state=active — выведет список только активных юнитов
systemctl list-units —type=service — выведет список юнитов, которые являются сервисом.
Добавление сервиса в systemd
Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:
systemctl enable nginx.service – команда добавит в автозагрузку веб-сервер nginx
Данная команда создаст символическую ссылку на копию файла, указанного в команде сервиса, в директории автозапуска systemd.
# systemctl enable nginx.service
Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:
systemctl status nginx.service
При выводе нужно обратить внимание на строку:
Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.
Удаление сервиса из systemd
Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду:
systemctl disable нужный_сервис
Например, чтобы удалить из автозагрузки nginx, выполните:
# systemctl disable nginx.service
После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:
# systemctl is-enabled sshd
Systemd: маскировка юнитов
В моей практике встречались «вредные» сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускались после рестарта ОС. Чтобы решить этот вопрос, можно замаскировать сервис:
systemctl mask nginx.service
И после этого, он вообще не будет запускаться, ни вручную, ни после перезагрузки ОС:
# systemctl mask nginx.service
# service nginx restart
Снять маску можно командой:
# systemctl unmask nginx.service
Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked):
Таким нехитрым способом, можно избавить себя от удаления сервиса, даже если он не удаляется из автозагрузки systemd.
Автозапуска скриптов и сервисов с помощью rc.local
Для запуска различных скриптов при загрузке Linux чаще всего используется rc.local.
Но помимо скриптов, через rc.local так же можно и запускать сервисы, даже те, которые запускаются через systemd. Не могу ответить на вопрос, для чего использовать в таком случае rc.local, если есть systemd, но пару примеров я приведу.
Начнем с того, что файл /etc/rc.local должен быть исполняемым:
chmod +x /etc/rc.local
Rc.local должен быть добавлен в автозагрузку systemd:
systemctl enable rc-local
И на примере того же nginx, мы можем добавить в rc.local команду запуска веб-сервера:
service nginx start
Но я редко использую rc.local для запуска сервисов. Чаще rc.local используется, когда нужно запустить скрипт, либо выполнить разово какую-то команду.
К примеру, я создал скрипт /root/test.sh который выполняет некоторые действия, и хочу запустить его сразу после запуска системы. Добавляем в файл rc.local строку:
Начиная с CentOS 7, разработчики указывают на то, что rc.local устаревший демон и осуществлять автозапуск скриптов или сервисов через него, это прошлый век. Но пока он работает, я пользуюсь им, так как он очень прост в эксплуатации.
Создание собственного демона и добавление его в systemd
Вы можете создать собственный демон, которым можно будет управлять через systemd.
Например, нам нужно запускать все тот же скрипт /root/test.sh после перезагрузки системы. Начнем с создания файла нашей будущей службы:
touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service
Содержимое файла будет следующее:
User – пользователь под которым будет запускаться демон
Type=oneshot — процесс будет завершен до запуска дальнейших юнитов
Проверяем и перезапускаем:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service
Если вас устроило то, как работает сервис, добавьте его в автозагрузку:
# systemctl enable test-script.service
Таким образом, вы можете добавить любой ваш скрипт в автозагрузку через systemd.
Автозапуск через cron
Если вам с какой-то периодичностью нужно запускать скрипт или команду, вы можете воспользоваться cron-ом:
crontab -e — открыть терминал для написания задания cron
И добавьте туда нужное вам задание, например:
* * * * * /root/test.sh — запускать скрипт каждую минуту.
Можно написать скрипт watch-dog, который по заданию будет проверять, например, статус какого-либо сервиса и, если он не работает, запускать его. На нескольких своих проектах я использую подобную схему.
Чтобы вывести список всех заданий в крон, нужно выполнить команду:
Допустимые значения для времени запуска заданий cron по порядку:
- Минуты от 0 до 59
- Часы от 0 до 59
- День месяца от 1 до 31
- Месяц от 1 до 12
- День недели от 0 до 7 (0 или 7 это воскресение)
В нашем задании скрипт запускается каждую минуту, поэтому там стоят «*».
Так же вы можете разместить нужный вам скрипт в директориях cron:
- /cron.daily – выполнение скрипта ежедневно
- /cron.hourly – выполнение скрипта ежечасно
- /cron.monthly — выполнение скрипта ежемесячно
- /cron.weekly — выполнение скрипта еженедельно
Скрипты в указанных директория будут запускаться согласно автоматически подготовленного расписания.
.bashrc: автозапуск скриптов при запуске терминала
Если вам требуется выполнять какие-то действия при запуске терминала ssh, вы можете добавить любую команду или выполнение скрипта в .bash_profile или .bashrc. Теоретически, вы можете добавить какое-либо действие в любой из этих файлов, оно выполнится в любом случае. Обычно все необходимое добавляется в .bashrc, а сам .bashrc запускают из .bash_profile.
Я добавил в файл .bashrc команду на рестарт веб-сервиса nginx:
service nginx restart
После этого сохранил файл и перезапустил терминал:
Как видите, при запуске терминала, веб-сервер был перезапущен. Какие действия можно выполнять при запуске терминала? Вероятно, запускать какие-то вспомогательные утилиты, например, проверка uptime сервера:
Или вы хотите, чтобы при запуске терминала, вы сразу попадали в нужную вам директорию и запускали mc, добавьте в .bashrc
Надеюсь эта статья по управлению автозапуском сервисов и скриптов в LInux (статья писалась для CentOS) оказалась полезной для вас. Наверняка тем, кто только познает азы системного администрирования Linux, это информация будет кстати.
Источник
Ubuntu, CentOS – Enable or Disable Service Autostart in Linux
Very often it is needed to enable or disable autostart of some services in Linux.
There are different init systems exist, but on Ubuntu and CentOS the most common are SysV , Upstart and systemd .
Depending on distribution, the behavior of a service during system’s boot in Linux can be configured with systemctl or chkconfig commands.
This tutorial shows how to enable or disable autostart of system services in the most popular Linux distributions – Ubuntu and CentOS.
Cool Tip: Want to become a DevOps engineer? Then you must know Git! This article helps to catch the Git basics really quickly! Read more →
Ubuntu-18.04
Supported releases: Ubuntu-15.04, 15.10, 16.04, 16.10, 18.04.
It is now used by default in most Linux distributions and is fully supported in Ubuntu-15.04 and later releases.
It goes with systemctl command line tool, that among the other things, can enable and disable services at boot time.
Check if service is enabled or disabled on startup:
Disable service autostart on Ubuntu-18.04:
Enable service autostart on Ubuntu-18.04:
Ubuntu-14.04
Supported releases: Ubuntu-9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10, 14.04, 14.10.
Check if service is enabled or disabled on startup:
Disable service autostart on Ubuntu-14.04:
Enable service autostart on Ubuntu-14.04:
CentOS-7
In CentOS-7, it replaces Upstart as the default init system.
systemd goes with systemctl command line utility that is the central management tool for systemd , that among the other things, can enable and disable services at boot time.
Cool Tip: Learn how to disable SELinux temporary or permanently! Read more →
Check if service is enabled or disabled on startup:
Disable service autostart in CentOS-7:
Enable service autostart in CentOS-7:
CentOS-6
Cool Tip: Learn how to disable iptables on CentOS-6! Read more →
Check if service is enabled or disabled on startup:
Источник
How to Enable or Disable Services in Ubuntu Systemd/Upstart
Often, there is a need to enable or disable services temporarily or permanently on our Ubuntu system. Sometimes, we may require certain services to start up automatically on boot up e.g ssh or web servers and sometimes we may need to disable services we no longer require and are hogging the CPU and RAM.
In this tutorial, we take a look at how we can enable and disable services on Ubuntu. To do this, we must first understand that there are 3 main init systems for Ubuntu
Each init system has a different way of starting and stopping services. We’ll take a look at each one of these.
How to enable and disable services in Systemd init
To start a service in systemd run the command as shown:
For example, to start apache web service, run
To verify that the service is running, run
Output
To stop the service running service
To confirm that the service is not running, run
Output
To enable apache2 service on boot up run
To disable apache2 service on boot up run
To restart the service
To check whether the service is currently configured to start on the next boot up
Output
To check whether the service is active
Output
How to remove Systemd services completely
What if you installed a package, and later on decide that you don’t need it anymore. How do you go about removing it completely? Follow the commands below.
First, stop the service
Then disable the service
Removing the service in systemd
How to enable and disable services in Upstart init
Upstart init system was unveiled just before systemd It was used in Ubuntu 9.10 to Ubuntu 14.10. It was later phased out paving way for systemd init in Ubuntu 15.04 and newer versions. In this example, let’s see how we can start and stop, enable and disable services in Ubuntu 14.04.
Upstart makes use of config files for controlling services. These files are held under the /etc/init directory. These files are made up of plain text sections organized in stanzas and each stanza describes a service and how it works.
To check whether a service is running or not run the command below
In this example, we’ll check the status of cups, a Linux print server.
Output
To stop the service run the command below
Output
To enable a service in Upstart init
In /etc/init/*.conf file, you’ll find the «respawn» directive which jump-starts a service should it crash unexpectedly or should the system reboot. Its normally enabled by default.
For example , in /etc/init/cups.conf file below,
the first argument (3) is the number of attempts it will try to restart and the second argument (12) is the time interval between retries. If it fails to restart automictically. it will be kept in a stopped state.
To disable a service in upstart init
run the command below
This creates an override file that disables a service without altering the job definition at all.
For cups service, the command will be
Upon a reboot of the system, cups will be in a stopped state. If you wish to re-enable the service, you must delete the /etc/init/cups.override file.
Sysv-rc-conf tool
This is a text-based console that gives you an overview of different service and runlevels they are scheduled to start. It can be installed using the following command
To execute the tool, run
Jobs-Admin tool
This is another feature that allows you to control services and processes in a GUI environment. You can install this by running.
How to enable and disable services in SysV init
To enable a service in SysV init run
For instance, If you want to enable apache web server, you would run
To disable a service , run
Nearly all Linux systems run on Systemd init From Ubuntu, Debian, RHEL, and CentOS. You’ll, therefore, discover that you’ll be using more of the systemctl command to start, stop, enable and disable services. We welcome you to try out the commands as shown in this article. Thank you.
Read Also:
More Articles You May Like
8 Comments. add one
Sometimes it needs «systemctl mask foo.service» to stop service «foo» start on boot.
Thanks for the article.
On Ubuntu (admittedly an old one for many reasons), I just found the SysV command to disable a service wasn’t quite what was written:
# update-rc.d disable apache2
update-rc.d: /etc/init.d/disable: file does not exist
Instead, it’s «update-rc.d disable»:
# update-rc.d apache2 disable
update-rc.d: warning: apache2 start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: apache2 stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
Disabling system startup links for /etc/init.d/apache2 .
Removing any system startup links for /etc/init.d/apache2 .
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2
Adding system startup for /etc/init.d/apache2 .
/etc/rc0.d/K09apache2 -> ../init.d/apache2
/etc/rc1.d/K09apache2 -> ../init.d/apache2
/etc/rc6.d/K09apache2 -> ../init.d/apache2
/etc/rc2.d/K09apache2 -> ../init.d/apache2
/etc/rc3.d/K09apache2 -> ../init.d/apache2
/etc/rc4.d/K09apache2 -> ../init.d/apache2
/etc/rc5.d/K09apache2 -> ../init.d/apache2
There is a typo: «systenctl» should be «systemctl» in the box near «To stop a service».
Источник