HOME > 技術ドキュメント > systemd サービス・タイマー設定入門(Ubuntu 24.04 LTS)
systemd サービス・タイマー設定入門(Ubuntu 24.04 LTS)
systemd は Linux のシステム・サービスマネージャーです。アプリのデーモン化、自動起動、定期実行(cron の代替)をまとめて管理できます。 本記事では .service ユニットと .timer ユニットの設定方法を実例とともに解説します。
unit ファイルの構造
unit ファイルは /etc/systemd/system/ に配置します。
[Unit] Description=サービスの説明 After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/myapp ExecStart=/usr/local/bin/myapp Restart=on-failure RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
主な [Service] オプション
| オプション | 説明 |
|---|---|
Type=simple |
ExecStart で起動したプロセスをサービス本体とみなす(デフォルト) |
User= |
実行ユーザーを指定(root 以外を推奨) |
Restart=on-failure |
異常終了時に自動再起動 |
RestartSec=5 |
再起動前の待機秒数 |
Environment=KEY=VALUE |
環境変数を設定 |
EnvironmentFile=/etc/myapp.env |
環境変数をファイルから読み込む |
サービスの有効化と操作
sudo systemctl daemon-reload # unit ファイルを再読み込み sudo systemctl enable myapp # 自動起動を有効化 sudo systemctl start myapp # 起動 sudo systemctl status myapp # 状態確認 sudo systemctl stop myapp # 停止 sudo systemctl restart myapp # 再起動 sudo systemctl disable myapp # 自動起動を無効化
journalctl でのログ確認
sudo journalctl -u myapp # 全ログを表示 sudo journalctl -u myapp -f # リアルタイムで追跡 sudo journalctl -u myapp --since "1 hour ago" sudo journalctl -u myapp -n 50 # 直近 50 行
.timer ユニットによる定期実行
cron の代替として .timer ユニットが使えます。.service と同名の .timer を作成します。
/etc/systemd/system/mybackup.service
[Unit] Description=My Backup Script [Service] Type=oneshot User=ubuntu ExecStart=/home/ubuntu/scripts/backup.sh
/etc/systemd/system/mybackup.timer
[Unit] Description=Run My Backup Daily [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target
sudo systemctl daemon-reload sudo systemctl enable --now mybackup.timer sudo systemctl list-timers
OnCalendar の記法例
| 記法 | 実行タイミング |
|---|---|
daily |
毎日 00:00:00 |
weekly |
毎週月曜日 00:00:00 |
*-*-* 02:00:00 |
毎日 02:00 |
Mon *-*-* 03:00:00 |
毎週月曜日 03:00 |
*-*-1 00:00:00 |
毎月 1 日の 00:00 |
Certbot の自動更新タイマー(実例)
Certbot(Let's Encrypt)は snap インストール時に自動で systemd タイマーが登録されます。
sudo systemctl status snap.certbot.renew.timer sudo systemctl list-timers snap.certbot.renew.timer
このタイマーが正常に動作していることで、90日ごとの証明書更新が自動化されます。
SSL証明書の自動更新にも systemd タイマーを活用
Certbot(Let's Encrypt)の自動更新は systemd タイマーで管理されます。
有料証明書では更新通知メールが届くため、その通知を受け取ったらタイマーを使って更新作業を自動化することも可能です。
証明書の失効を防ぐには定期的な更新管理が重要です。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
RapidSSL 3,960円/1年(税込)〜で SSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス
関連ドキュメント
Certbot(Let's Encrypt)自動更新設定 — systemd タイマーを使った証明書自動更新
Go 言語 Web アプリ入門 — Go アプリの systemd サービス化
Node.js + Express Web アプリ入門 — Node.js の systemd サービス化
