Просмотреть список зарегистрированных служб:
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
Чтобы получать уведомления на электронную почту об ошибке запуска некоторой службы systemd, нужно2) сделать следующее:
1. Создать скрипт отправки сообщения (пример дан для bsd-mailx
; для sendmail
можно посмотреть здесь).
#!/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 для отправки сообщения.
[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
[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
#!/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
[Unit] ... Requires=mount-data.service After=mount-data.service ...