PONOS Advent Calendar 2025 の17日目の記事です。
前回は@gif-haraさんの【Unity】社内エンジニア課題で作ったゲームで採用した設計についてまとめるでした。
はじめに
最近のLinuxでは、サービス管理にsystemdが使われています。
これは従来の(System V)initに置き換わるもので、コマンド体系やお作法もかなり異なります。
毎度「chkconfigの代わりのコマンドって何だっけ」と調べるのもそろそろ止めたいので、従来のコマンドとsystemd環境下でのコマンドの対応表を作りつつ、理解を深めてみました。
「最近のLinux」…?
Wikipediaによると、systemdの初版がリリースされたのは 2010年 、DebianやUbuntuのデフォルトに設定されたのが 2015年 だそうです。
全然最近ではありませんでした!
Before-After 対応表
| Before | After | できること |
|---|---|---|
| service hoge start /etc/init.d/hoge start |
systemctl start hoge | サービスの開始 |
| chkconfig hoge on insserv -d hoge |
systemctl enable hoge | サービスの自動実行設定 |
| crontab -l | systemctl list-timers | 定期実行の設定状況確認 |
| crontab -e | vi /etc/systemd/system/hoge.timer vi /etc/systemd/system/timers.target.wants/hoge.timer |
定期実行の設定変更 |
| shutdown -h | systemctl poweroff | シャットダウン |
| tail -f /var/log/messages | journalctl -f | 最新のログをリアルタイム表示 |
| vi /etc/hostname | hostnamectl set-hostname hoge | ホスト名設定 |
| sudo ln -sd /usr/share/zoneinfo/hoge /etc/localtime | timedatectl set-timezone hoge | タイムゾーン設定 |
Afterの補足
systemctl start hoge
serviceコマンドとは、オプションの順番が逆になっていて非常に間違えやすいです。
(いったい何度「httpdというコマンドは無いよ」と言われたことか)
根っこの設計思想として、systemctlは「コマンド サブコマンド オプション」の順に並んでいると認識しておくのがよさそう。(gitとかaptと同じですね。)
systemctl startの他に、systemctl stop systemctl statusあたりをよく使います。
systemctl enable hoge
反対に無効にしたいときはsystemctl disable hogeです。
systemctl list-timers
crontabと比べて、前回実行日時・次回実行日時も一発で見られて便利です。
$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2025-12-17 00:00:00 JST 1h 46min Tue 2025-12-16 00:00:09 JST 22h ago dpkg-db-backup.timer dpkg-db-backup.service
Wed 2025-12-17 06:30:29 JST 8h Tue 2025-12-16 06:05:55 JST 16h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Wed 2025-12-17 11:27:56 JST 13h Tue 2025-12-16 11:27:55 JST 10h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Wed 2025-12-17 11:58:46 JST 13h Tue 2025-12-16 15:54:55 JST 6h ago motd-news.timer motd-news.service
Wed 2025-12-17 16:56:01 JST 18h Tue 2025-12-16 18:50:55 JST 3h 22min ago apt-daily.timer apt-daily.service
Sun 2025-12-21 03:10:44 JST 4 days Sun 2025-12-14 03:10:55 JST 2 days ago e2scrub_all.timer e2scrub_all.service
Mon 2025-12-22 01:18:11 JST 5 days Mon 2025-12-15 00:26:45 JST 1 day 21h ago fstrim.timer fstrim.service
7 timers listed.
Pass --all to see loaded but inactive timers, too.
さすが新しいコマンドは機能豊富でいいな〜。
vi /etc/systemd/system/hoge.timer ※ タイマー設定追加
と思ってたら、タイマーを追加するときはファイルを手動で作る必要があります。
こんなフォーマットです。
[Unit]
Description=Message of the Day
[Timer]
OnCalendar=00,12:00:00
RandomizedDelaySec=12h
Persistent=true
OnStartupSec=1min
[Install]
WantedBy=timers.target
systemctl poweroff
shutdownと違い、実行前に認証が入ります。
おかげで、誤って入力したときでもちゃんとブレーキがかかって安心。
$ systemctl poweroff
==== AUTHENTICATING FOR org.freedesktop.login1.power-off ====
Authentication is required to power off the system.
Multiple identities can be used for authentication:
1. hoge
2. ,,, (fuga)
Choose identity to authenticate as (1-3):
journalctl -f
systemd環境では、各種ログはjournaldに集約されています。
オプション無しだとシステム全体のログがまとめて出力されますが、サービスで絞ることもできます。
$ journalctl -u httpd -f
hostnamectl set-hostname hoge
(なんかPowerShellみがある)
hostnamectl単体で打てば、現在の設定値が確認できます。
ホスト名だけ1行で出てくるのかと思いきや、情報量が多いです。
unameで確認していたような内容も包含していますね。
$ hostnamectl
Static hostname: hogehoge
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: ***
Boot ID: ***
Virtualization: microsoft
Operating System: Ubuntu 24.04.3 LTS
Kernel: Linux 6.8.0-71-generic
Architecture: x86-64
Hardware Vendor: Microsoft Corporation
Hardware Model: Virtual Machine
Firmware Version: 090008
Firmware Date: Fri 2018-12-07
Firmware Age: 7y 1w 2d
timedatectl set-timezone hoge
(PowerShellみのあるコマンドその2)
これも単にtimedatectlと打つことで設定値が確認できます。
$ timedatectl
Local time: Tue 2025-12-16 22:40:03 JST
Universal time: Tue 2025-12-16 13:40:03 UTC
RTC time: Tue 2025-12-16 13:40:03
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
さいごに
今回挙げたコマンドの中には、まだ公式リポジトリにBeforeのコマンドが残っていたりして、しつこく使い続けられるものもあります。
ですが、さすがにもう慣れていった方が何かと楽だし、Beforeに比べて便利になっている部分も多いです。
「あの頃は手癖で shutdown -h now を打てたものじゃ」と昔語りをしつつ、ちゃんと現役のコマンドも使えるようにしたいですね。
明日は @tequila0725 さんの記事です。お楽しみに!