見出し画像

systemctl restart と daemon-reload の違いとは?


Linuxサーバーを管理していると、設定を変更した後に「変更を適用するにはどうすればいいんだっけ?」と迷うことがありますよね。特に systemctl restart と daemon-reload の違いがピンとこない人も多いはず。

「設定を変えたら restart すればいいんじゃないの?」と思いがちですが、実は変更内容によっては daemon-reload が必要になることもあります。この記事では、それぞれの役割と使い分けを整理していきます!


systemctl restart の役割

まず systemctl restart <サービス名> ですが、これは サービス自体の再起動 を行います。

どういうときに使う?

たとえば nginx を使っていて、設定ファイル /etc/nginx/nginx.conf を変更した場合を考えてみましょう。
このままだと nginx は変更を認識しません。そこで以下のコマンドを実行します。

systemctl restart nginx

これにより nginx は一度停止して再起動し、新しい設定が反映されます。

ただし…!

restart だけでは systemdのUnitファイル(*.service や *.timer)の変更は反映されません
例えば、/etc/systemd/system/nginx.service の ExecStart を変更した場合、restart だけでは systemd はその変更に気づかないのです。


systemctl daemon-reload の役割

では、Unitファイルの変更を反映させるにはどうすればいいのでしょうか?
その答えが systemctl daemon-reload です。

どういうときに使う?

例えば nginx.service の ExecStart を変更し、restart だけを実行するとどうなるでしょう?
変更前の設定のまま nginx が再起動してしまい、新しい設定は反映されません。

このように、systemdが管理するUnitファイルを変更した場合は、daemon-reload を実行して変更を読み込ませる必要があります

systemctl daemon-reload

このコマンドを実行することで、systemdは変更されたUnitファイルを認識できるようになります。

ただし…!

daemon-reload を実行しても、すでに動いているサービスには影響を与えません。
つまり、サービスを再起動しないと変更が適用されないのです。


daemon-reload と restart を組み合わせるべきケース

ここまでの話を整理すると、以下のように使い分けると良いでしょう。

  • 設定ファイル(/etc/nginx/nginx.conf など)を変更した場合
    → systemctl restart <サービス名> でOK

  • Unitファイル(*.service や *.timer)を変更した場合
    → systemctl daemon-reload で変更を読み込み、その後 systemctl restart <サービス名> で適用

例:nginx.service を変更した場合

もし /etc/systemd/system/nginx.service の ExecStart を変更したら、以下の順番で実行しましょう。

systemctl daemon-reload
systemctl restart nginx

または、1行でまとめるならこうです。

systemctl daemon-reload && systemctl restart nginx

まとめ

「設定を変えたのに反映されない!」というトラブルを避けるために、以下のルールを覚えておきましょう。

使い分けのポイント

サービスの設定を変えたら → systemctl restart <サービス名>
Unitファイルを変更したら → systemctl daemon-reload && systemctl restart <サービス名>

もし restart だけでは変更が反映されない場合、daemon-reload の実行が必要かもしれません。
変更内容に応じて、適切なコマンドを使い分けましょう!

いいなと思ったら応援しよう!