Зміст

systemd

Настройка

Службы

Просмотреть список зарегистрированных служб:

sudo systemctl list-unit-files

Разрешить службу:

sudo systemctl enable transmission.service

Запустить службу:

sudo systemctl start transmission.service  

Остановить службу:

sudo systemctl stop transmission.service

Проверить состояние службы:

sudo systemctl status transmission.service

Таймеры

Просмотреть список зарегистрированных таймеров:

sudo systemctl -a list-timers

Запустить некоторый таймер (в данном случае – updatedb):

sudo systemctl start updatedb.timer

Настройка времени

timedatectl list-timezones
sudo timedatectl set-timezone Europe/Kiev

1)

Уведомление на e-mail

Чтобы получать уведомления на электронную почту об ошибке запуска некоторой службы systemd, нужно2) сделать следующее:

1. Создать скрипт отправки сообщения (пример дан для bsd-mailx; для sendmail можно посмотреть здесь).

"/usr/local/bin/systemd-email"
#!/bin/bash
 
export LANG=C
/usr/bin/mail -a "Content-Transfer-Encoding: 8bit" -a "Content-Type: text/plain; charset=UTF-8" -s "$2" $1 <<ERRMAIL
 
$(systemctl status --full "$2")
ERRMAIL

2. Создать службу systemd для отправки сообщения.

"/etc/systemd/system/status-email-admin@.service"
[Unit]
Description=status email for %i to admin
 
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email admin@server.org %i
#User=nobody
User=root
Group=systemd-journal

Здесь “admin@server.org” – это e-mail, на который нужно высылать сообщение. Пользователь “root” нужен для случая, когда systemctl не запускается от других пользователей. В противном случае лучше использовать пользователя “nobody”.

3. Если всё настроилось и работает, то нужно добавить следующую строку в раздел [Unit] файлов служб systemd, при ошибке запуска которых требуется высылать письмо:

OnFailure=status-email-admin@%n.service

Создание

Службы

'/etc/systemd/system/mount-data.service'
[Unit]
Description=Mount USB HDD
 
[Service]
Type=oneshot
RemainAfterExit=yes
 
#PIDFile=/run/thttpd.pid
#ExecStart=/usr/bin/thttpd -D -C /etc/thttpd.conf
ExecStart=/usr/local/bin/mount_data.sh
#ExecReload=
ExecStop=/usr/local/bin/mount_data.sh unmount
#Restart=always
 
# No USB HDD attached
RestartPreventExitStatus=1
 
 
#[Install]
#WantedBy=multi-user.target
'/usr/local/bin/mount_data.sh'
#!/bin/bash
 
if [ "$1" == "unmount" ]
then
    MOUNT=`mount | grep '/mnt/data'`
    if [ -n "$MOUNT" ]
    then
        echo "Unmounting /mnt/data"
        umount /mnt/data
    else
        echo "ERROR: /mnt/data is not mounted."
    fi
else
    if [ -e /dev/sda4 ]
    then
      echo "Mounting /dev/sda4 as /mnt/data"
      mount /mnt/data
    else
      echo "ERROR: No HDD."
      exit 1
    fi
fi
'/etc/systemd/system/multi-user.target.wants/transmission.service'
[Unit]
...
Requires=mount-data.service
After=mount-data.service
...

Ссылки

http://www.freedesktop.org/software/systemd/man/systemd.service.html

http://www.freedesktop.org/software/systemd/man/systemd.unit.html

https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files