ユーザ用ツール

サイト用ツール


systemd

文書の過去の版を表示しています。


Systemd

Linuxのシステム管理、起動処理を行う仕組み。SysVinitやupstartなどの起動処理の代替だけではなく、cronなどの処理も置き換えている。2018年現在のLinuxディストリビューションはほぼ全てSystemdを採用している

コマンド

サービス(旧来のデーモンに当たる常駐プロセス)の一覧

$ systemctl list-unit-files --type service

サービスの状態を確認

$ systemctl status nginx.service

サービスの起動と停止

$ systemctl start nginx.service
$ systemctl stop nginx.service

一部のサービスにはreload(再起動せずconfigファイルの読み直し)もある。いい感じのbashでは補完機能でreload可能なサービスのみリストアップされる、ただし少し重い。

$ systemctl reload nginx.service

systemd-resolved

systemdで提供されるDNSクライアント。詳細は以下のコマンドで確認できる

$ systemd-resolve --status

systemd-timesyncd

時刻合わせもsystemdの管理下になり、従来のntpからsystemd-timesyncdに変わっている

$ systemctl status systemd-timesyncd

なお、時刻やタイムゾーンの設定はtimedatectlというコマンドで行う

$ sudo timedatectl set-timezone Asia/Tokyo

NTPサーバの指定などは以下のファイルにある

$ less /etc/systemd/timesyncd.conf

すぐに時刻合わせをしたい場合はrestartすると良い

$ sudo systemctl restart systemd-timesyncd

timer

定期実行ジョブを作成できる。cronのようなもの

設定されているタイマーを確認

systemctl list-timers

timerを自作する

例)mysqlバックアップジョブを作る

/etc/systemd/system/backup-mysql.serviceを作成。バックアップスクリプトを起動するジョブを定義

[Unit]
Description=backup mysql
Wants=mysql.service

[Service]
Type=oneshot
ExecStart=/opt/backup/backup-mysql.sh

[Install]
WantedBy=multi-user.target

これを有効にする

sudo systemctl enable backup-mysql.service

/etc/systemd/system/backup-mysql.timerを作成。先に作ったserviceをいつ起動するか定義する。時刻はlocal timeが適用される。ファイル名をserviceと同じ名前にしておくと、どのサービスを起動するかの指定(Unit)が不要になるようだ

[Unit]
Description=backup mysql timer

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup-mysql.service

[Install]
WantedBy=timers.target

これを有効にして、タイマーを開始する

sudo systemctl enable backup-mysql.timer
sudo systemctl start backup-mysql.timer

バックアップスクリプトはいい感じに作る

/opt/backup/backup-mysql.sh
#!/bin/bash -e
 
cd /opt/backup/data
 
mysqldump --defaults-extra-file=/opt/backup/backup-mysql.extra --opt --single-transaction --databases hoge > mysql_hoge_buckup.sql
 
gzip mysql_hoge_buckup.sql
 
mv mysql_hoge_buckup.sql.gz "mysql_hoge_buckup.$(date +%Y%m%d).sql.gz"
 
find . -name "*.sql.gz" -mtime +7 -print0 | xargs --no-run-if-empty -0 rm

単にバックアップ目的なら cron.daily に上記のスクリプトを設置する方が楽

systemd.1633504602.txt.gz · 最終更新: 2021/10/06 07:16 by nullpon