文書の過去の版を表示しています。
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-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のようなもの
例)mysqlバックアップジョブを作る
/usr/lib/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
/usr/lib/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 に上記のスクリプトを設置する方が楽