Все юниты разложены в трех каталогах:

 

/usr/lib/systemd/system/ – юниты из установленных пакетов RPM — всякие nginx, apache, mysql и прочее

/run/systemd/system/ — юниты, созданные в рантайме — тоже, наверное, нужная штука

/etc/systemd/system/ — юниты, созданные системным администратором — а вот сюда мы и положим свой юнит.

 

Пример:

Создаём скрипт:

# vi /etc/sysconfig/ipset.sh

 

#!/bin/bash

if [ "$1" = 'start' ]; then

/sbin/modprobe ip_set

IPS="/sbin/ipset"

IPS_SIP=/etc/ipset_sip.conf

IPT="iptables"

${IPS} -exist destroy sip &>/dev/null

${IPS} create sip hash:net

if [ -s "${IPS_SIP}" ]; then

cat "${IPS_SIP}" | grep -v '^#' | grep -v ^$ | awk '!x[$1]++' | while read LINE; do

${IPS} -exist add sip $LINE

done

fi

${IPT} -A INPUT -p udp -m set --match-set sip src -m multiport --dports 5060,10000:20000 -j ACCEPT

else

iptables -D INPUT -p udp -m set --match-set sip src -m multiport --dports 5060,10000:20000 -j ACCEPT

/sbin/ipset -exist destroy sip &>/dev/null

fi

 

++++

Задаем права:

# chmod 750 /etc/sysconfig/ipset.sh

 

Создаем юнит:

# vi /etc/systemd/system/ipset1.service

 

[Unit]

Description=mystuff

After=iptables.service

 

[Service]

RemainAfterExit=yes

Type=simple

ExecStart=/etc/sysconfig/ipset.sh start

ExecStop=/etc/sysconfig/ipset.sh stop

 

[Install]

WantedBy=multi-user.target

+++++-

Задаем ему права:

# chmod 644 /etc/systemd/system/test.service

 

создаем файл с IP-адресами:

# vi /etc/ipset_sip.conf

# chmod 750 /etc/ipset_sip.conf

После каждого изменения делаем reload:

# systemctl daemon-reload

 

# systemctl start ipset1.service

 

# systemctl stop ipset1.service

-----------------------------+

Запуск скрипта в фоне:

[Unit]

Description=MyTestScript

 

[Service]

User=root

ExecStart=/home/cp38510/test.sh

Type=simple

Restart=always

 

[Install]

WantedBy=multi-user.target

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

Параметры:

надо описать три секции: [Unit], [Service], [Install]

 

[Unit]

Description=MyUnit   -описание

After=syslog.target    -запустить юнит после syslog

Before=network.target   -запустить юнит до network

Requires=mysql.service   -для запуска сервиса необходим запущенный сервис mysql

 

[Service]

RemainAfterExit=yes    -запомнить после запуска

Type=simple    -простая служба

Type=forking    -для запуска и развлетвления

PIDFile=/work/www/myunit/shared/tmp/pids/service.pid   -PID службы

WorkingDirectory=/work/www/myunit/current       -Рабочий каталог, он делается текущим перед запуском стартап команд

User=root   -от кого стартовать сервис

Group=root

Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"  -переменные окружения

ExecStart=/etc/sysconfig/ipset.sh start    -старт/стоп сервиса

ExecStop=/etc/sysconfig/ipset.sh stop

ExecStart=/usr/bin/env bash /etc/init.d/test.sh

ExecStop=/usr/bin/env bash /etc/init.d/teststop.sh

StopWhenUnneeded=true    -остановить немедленно

Restart=always      -автоматически рестартовать скрипт (если он завершился)

 

[Install]

WantedBy=multi-user.target    -уровень запуска (соответствует runlevel=3)

 

 

Материалы:

http://linux-notes.org/pishem-systemd-unit-fajl/

https://habrahabr.ru/company/southbridge/blog/255845/

https://habrahabr.ru/post/275645/

https://wiki.archlinux.org/index.php/Systemd/User_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) - systemd/User (Русский)

https://www.linux.org.ru/forum/admin/11347382  -обсуждение

https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet/ru#.D0.A3.D1.80.D0.BE.D0.B2.D0.BD.D0.B8_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B8.2F.D1.86.D0.B5.D0.BB.D0.B8