3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10年越しでsystemd環境に慣れていきたい

3
Last updated at Posted at 2025-12-17

PONOS Advent Calendar 2025 の17日目の記事です。

前回は@gif-haraさんの【Unity】社内エンジニア課題で作ったゲームで採用した設計についてまとめるでした。

はじめに

最近のLinuxでは、サービス管理にsystemdが使われています。
これは従来の(System V)initに置き換わるもので、コマンド体系やお作法もかなり異なります。

毎度「chkconfigの代わりのコマンドって何だっけ」と調べるのもそろそろ止めたいので、従来のコマンドとsystemd環境下でのコマンドの対応表を作りつつ、理解を深めてみました。

「最近のLinux」…? :thinking:

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 さんの記事です。お楽しみに!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?