
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 <サービス名> でOKUnitファイル(*.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 の実行が必要かもしれません。
変更内容に応じて、適切なコマンドを使い分けましょう!