ユーザ用ツール

サイト用ツール


systemd

Systemd

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

コマンド

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

$ systemctl list-unit-files --type service

有効なサービスの一覧を見る

$ systemctl list-unit --type service

サービスの状態を確認

$ systemctl status nginx.service

サービスの起動と停止

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

自動起動を有効化する(普通は有効化されているが何らかの原因でdisabledになってしまった場合の修正)

$ systemctl enable nginx.service

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

$ systemctl reload nginx.service

systemd-resolved

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

$ systemd-resolve --status

systemd-resolvedは名前解決用のサーバを立ち上げている。/etc/resolv.confを見ると

nameserver 127.0.0.53
options edns0 trust-ad
search localdomain

のようになっている。systemdで管理されているLinuxサーバ上で各アプリケーションは127.0.0.53をネームサーバとして利用できる。

実際に使用される外部ネームサーバは/run/systemd/resolve/resolv.confに書かれている。これを変更したい場合はこのファイルには触らず、netplanを経由して行うとよい

systemd-timesyncd

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

$ systemctl status systemd-timesyncd

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

$ sudo timedatectl set-timezone Asia/Tokyo

現在のTimeZone設定もtimedatectlで確認できる

$ timedatectl
               Local time: 土 2023-01-28 01:44:40 JST
           Universal time: 金 2023-01-27 16:44:40 UTC
                 RTC time: 金 2023-01-27 16:44:40
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

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.txt · 最終更新: 2023/03/16 18:01 by nullpon