- How to run my looping Bash script as a service?
- Как запустить bash скрипт как systemd сервис
- Создание bash скрипта
- Создание systemd сервиса
- Запуск сервиса и добавление в автозагрузку
- Как сделать в линукс Ubuntu из Bash скрипта сервис?
- 1 ответ 1
- 📜 Как запустить shell скрипт как службу SystemD на Linux
- Шаг 1 – Создайте скрипт
- Шаг 2 – Создайте файл SystemD
- Шаг 3 – Включите новую службу
- Заключение
- You may also like
- 📜 Чтение файла построчно на Bash
- 📧 В чем разница между IMAP и POP3
- ✔️ Как управлять контейнерами LXD от имени обычного.
- 📜 Руководство для начинающих по созданию первого пакета.
- Феноменальная популярность электроники Xiaomi: основные причины
- 📜 Получение вчерашней даты в Bash: Практическое руководство
- Использование специальных гелей при мышечных болях
- 📦 Как расширить/увеличить файловую систему VxFS на Linux
- Услуги по размещению серверного оборудования в ЦОД
- Для чего выполняется ИТ консалтинг на предприятиях?
- 2 комментария
- Leave a Comment Cancel Reply
- • Свежие записи
- • Категории
- • Теги
- • itsecforu.ru
- • Страны посетителей
- IT is good
How to run my looping Bash script as a service?
I have 2 Amazon Linux EC2 instances that are running HAProxy. I want to monitor each instance from the other instance and if a instance becomes unavailable, the other instance will issue a API command to move the elastic IP to the active server. I created a Bash script to do the monitoring every XX seconds. I need to set the script to run as a service so I created a service wrapper and placed in /etc/init.d based on a template that I found and registered as a service. The problem is when I issue command #service hamonitor start, it says «Starting hamonitor. «, but I never see the OK message and if I issue the stop command, it fails and if I issue the status command, it says it is not running. But, if I check the logs, it shows that the script is in fact running. I assume that I need a proper PID file and/or since the script runs in a infinite loop, it never completes so the OK does not get issued. Service Wrapper:
#!/bin/sh # # /etc/init.d/hamonitor # Subsystem file for "hamonitor" server # # chkconfig: 2345 95 05 (1) # description: hamonitor server daemon # # processname: hamonitor ### BEGIN INIT INFO # Provides: # Required-Start: # Required-Stop: # Should-Start: # Should-Stop: # Default-Start: # Default-Stop: # Short-Description: # Description: ### END INIT INFO # source function library . /etc/rc.d/init.d/functions PROG=hamonitor EXEC=/etc/haproxy/hamonitor LOCKFILE=/var/lock/subsys/$prog PIDFILE=/var/run/$prog.pid RETVAL=0 start() < echo -n $"Starting $PROG:" echo #daemon $EXEC & /etc/haproxy/hamonitor & RETVAL=$? if [ $RETVAL -eq 0 ]; then touch LOCKFILE touch PIDFILE echo "[ OK ]" else echo "[ FAIL: $]" fi return $RETVAL > stop() < echo -n $"Stopping $PROG:" echo killproc $PROG -TERM RETVAL=$? if [ $RETVAL -eq 0 ]; then rm -f LOCKFILE rm -f PIDFILE echo "[ OK ]" else echo "[ FAIL: $]" fi return $RETVAL > case "$1" in start) start ;; stop) stop ;; status) status $PROG RETVAL=$? ;; restart) stop start ;; *) echo $"Usage: $0 " RETVAL=1 esac exit $RETVAL
#!/usr/bin/env bash export EC2_HOME=/opt/aws/apitools/ec2 export JAVA_HOME=/usr/lib/jvm/jre AWS_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXXXXXXX" AWS_SECRET_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" VIP1="1.2.3.4" VIP1_ALLOCATIONID="eipalloc-XXXXXXX" THIS_NODE_EC2_ID="i-XXXXXXX" THIS_NODE_PRIVATE_IPADDRESS1="10.60.0.11" THIS_NODE_HEALTHCHECK_URL="http://10.60.0.10/haproxy?monitor" OTHER_NODE_HEALTHCHECK_URL="http://10.60.49.50/haproxy?monitor" CHECK_OTHER_INTERVAL=5 CHECK_OTHER_FAIL_COUNT=0 CHECK_OTHER_RUN_COUNT=0 AFTER_TAKEOVER_WAIT=30 function takeover_vips < /opt/aws/bin/ec2-associate-address -aws-access-key $-aws-secret-key $ -a $ -i $ -private-ip-address $ -allow-reassociation > /dev/null > function does_this_node_have_ips < is_active=$(/opt/aws/bin/ec2-describe-addresses -aws-access-key $-aws-secret-key $ | grep $ | grep $) if [ "$is_active" = "" ]; then echo "no" else echo "yes" fi > function log_msg < msg=$1 msg="$(date) -- $" echo $ >> /var/log/hamonitorlog > while [ . ]; do healthcheck_response=$(curl -sL -w "%" $ -o /dev/null) if [ "$healthcheck_response" != "200" ]; then CHECK_OTHER_FAIL_COUNT=$((CHECK_OTHER_FAIL_COUNT+1)) if [ "$CHECK_OTHER_FAIL_COUNT" -gt 2 ]; then takeover_vips CHECK_OTHER_FAIL_COUNT=0 sleep $ fi sleep $ done
Как запустить bash скрипт как systemd сервис
Иногда требуется запустить произвольный скрипт и держать его запущенным постоянно. Раньше для этого часто использовали Supervisor, но в современных ОС есть встроенное средство (а точнее сервисы это часть довольно большого комплекса) — systemd.
В это статье я расскажу, как запустить произвольный bash скрипт в качестве systemd сервиса
Создание bash скрипта
Создадим с помощью любого текстового редактора простой bash скрипт, я буду использовать vi:
В качестве содержимого возьмем бесконечный цикл:
#!/bin/bash while true do // Как-то действия sleep 10 done
Сохраним его и дадим права на запуск:
Создание systemd сервиса
systemd сервисы должны иметь расширение .service и должны быть расположены в /lib/systemd/system/
Создадим сервис с именем testservice.service:
vi /lib/systemd/system/testservice.service
В качестве содержимого укажем:
[Unit] Description=Test Script [Service] ExecStart=/usr/bin/script.sh [Install] WantedBy=multi-user.target
Запуск сервиса и добавление в автозагрузку
Т.к. мы добавили новый сервис, то нужно перестроить список сервисов:
Для запуска сервиса используется команда опция start, а для добавления в автозагрузку — enable:
systemctl enable testservice.service systemctl start testservice.service
Либо вы можете добавить сервис в автозагрузку и сразу запустить его командой:
systemctl enable testservice.service --now
Теперь проверим статус сервиса:
systemctl status testservice.service
Сервис будет запущен и успешно работать.
Как сделать в линукс Ubuntu из Bash скрипта сервис?
Собственно вопрос, как сделать из Bash скрипта в Linux сервис (демон), с возможностью проверки его на работоспособность перезапуском в случаи сбоя или зависания?
1 ответ 1
Для этой цели можно создать юнит systemd. Для начала нужно создать файл с названием my.service и поместим его в /etc/systemd/system.
[Unit] Description = My demon [Service] RemainAfterExit=true ExecStop=/usr/local/bin/my Type=oneshot [Install] WantedBy=multi-user.target
Раздел [Unit] хранит общие сведения о юните. В данном случае он содержит только описание (Description).
Раздел [Service] объединяет сведения, необходимые для выполнения юнитом его задач. Type определяет тип сервиса (не путайте его с разновидностями юнитов), oneshot означает, что сервис должен выполнить разовую задачу и завершиться. ExecStop указывает скрипт, который должен быть выполнен перед остановкой сервиса. Есть еще ExecStart, этот параметр используется чаще и определяет команду, которая должна быть выполнена сразу после запуска сервиса. RemainAfterExit=true предписывает systemd считать процесс активным после его завершения.
Секция [Install] содержит сведения о том, при каких обстоятельствах должен быть запущен сервис. WantedBy=multi-user.target устанавливает запуск при обычной загрузке компьютера.
Далее нужно поместить ваш скрипт (my) в /usr/local/bin/ . Командами:
sudo systemctl enable my sudo systemctl start my
можно добавить сервис в автозагрузку и запустить его, чтобы он включился.
Более подробно можете ознакомиться в этой статье и в man. Также может быть полезна статья с хабра.
📜 Как запустить shell скрипт как службу SystemD на Linux
Systemd – это программное приложение, которое предоставляет набор системных компонентов для операционных систем Linux.
Это первая служба, инициализирующая последовательность загрузки.
Она всегда работает с pid 1.
Она также помогает управлять системой и сервисом приложений в нашей операционной системе Linux.
Мы также можем запустить любой пользовательский скрипт как службу systemd.
Это помогает скрипту запускаться при загрузке системы.
Это может быть полезно для запуска любого скрипта, который должен запускаться только во время загрузки или запускаться всегда.
В этом руководстве рассматривается запуск bash скрипта как службы Systemd.
Шаг 1 – Создайте скрипт
Прежде всего, создайте образец скрипта, который будет запускаться при запуске системы.
#!/bin/bash while true do //Your statements here sleep 10 done
Сохраните скрипт и установите права на выполнение.
sudo chmod +x /usr/bin/script.sh
Для однократного запуска скрипта во время загрузки системы не требуется бесконечного цикла.
Вместо приведенного выше скрита вы можете использовать свой скрипт для запуска в качестве службы Systemd.
Шаг 2 – Создайте файл SystemD
Затем создайте служебный файл для systemd в вашей системе.
Этот файл должен иметь расширение .service и храниться в каталоге /lib/systemd/system/.
sudo vi /lib/systemd/system/shellscript.service
[Unit] Description=My Shell Script [Service] ExecStart=/usr/bin/script.sh [Install] WantedBy=multi-user.target
Шаг 3 – Включите новую службу
Ваша системная служба добавлена.
Давайте перезагрузим демон systemctl, чтобы система прочитала новый файл.
Вам необходимо перезагружать этот демон каждый раз после внесения каких-либо изменений в файл .service.
sudo systemctl daemon-reload
Теперь разрешите запуск службы при загрузке системы, а также запустите службу с помощью следующих команд.
sudo systemctl enable shellscript.service
sudo systemctl start shellscript.service
sudo systemctl status shellscript.service
Заключение
itisgood
📜 Shell скрипты – удаление двойных кавычек (“”) из строки
🍓 Как записать операционную систему на карту microSD с помощью графического пользовательского интерфейса
You may also like
📜 Чтение файла построчно на Bash
📧 В чем разница между IMAP и POP3
✔️ Как управлять контейнерами LXD от имени обычного.
📜 Руководство для начинающих по созданию первого пакета.
Феноменальная популярность электроники Xiaomi: основные причины
📜 Получение вчерашней даты в Bash: Практическое руководство
Использование специальных гелей при мышечных болях
📦 Как расширить/увеличить файловую систему VxFS на Linux
Услуги по размещению серверного оборудования в ЦОД
Для чего выполняется ИТ консалтинг на предприятиях?
2 комментария
Leave a Comment Cancel Reply
• Свежие записи
• Категории
• Теги
• itsecforu.ru
• Страны посетителей
IT is good
В этой статье вы узнаете, как удалить удаленный Git-репозиторий. Процесс прост, но его полезно запомнить, чтобы избежать неожиданностей в будущем. Git – это…
В 11-й версии своей операционной системы Microsoft серьезно переработала интерфейс и убрала несколько привычных функций. Нововведения не всем пришлись по душе. Мы дадим…
Продажа ноутбука нередко становится хлопотным занятием. Кроме поиска покупателя, продавцу необходимо подготовить устройство перед проведением сделки. Но если последовательно выполнить все шаги, ничего…
Вы можете оказаться в ситуации, когда вам нужно использовать скрипт шелла для чтения файлов построчно. В этом руководстве я расскажу о нескольких способах…
Вторичное жильё выгоднее для молодых семей, желающих приобрести свою первую квартиру. Сталкиваясь с ипотечным кредитованием, можно избежать много лишней суеты и проблем, если…