====== 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 ((https://wiki.archlinux.org/index.php/Time)) ===== Уведомление на e-mail ===== Чтобы получать уведомления на электронную почту об ошибке запуска некоторой службы systemd, нужно((https://wiki.archlinux.org/index.php/Systemd/Timers#MAILTO)) сделать следующее: **1.** Создать скрипт отправки сообщения (пример дан для ''bsd-mailx''; для ''sendmail'' можно посмотреть [[https://wiki.archlinux.org/index.php/Systemd/Timers | здесь]]). #!/bin/bash export LANG=C /usr/bin/mail -a "Content-Transfer-Encoding: 8bit" -a "Content-Type: text/plain; charset=UTF-8" -s "$2" $1 < **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 ... ===== Ссылки ===== 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