firewall.service
あるコンピュータでは、Debian 9.5を実行しているコンピュータで正しく実行されるsystemdサービスを準備しました。
これで、同じスクリプトでDebian 9.5を実行している別のコンピュータをセットアップしていますが、起動時に実行が拒否され、理由に関する何も表示されないようです。
一度起動すると、systemdが最初にサービスを開始しようとしなかったことを示すいくつかの出力は次のとおりです。
[root@bigbrother ~]# journalctl -u firewall
-- No entries --
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
Loaded: loaded (/etc/systemd/system/firewall.service; enabled; vendor preset: enabled)
Active: inactive (dead)
ファイアウォールサービスは、/etc/systemd/system/firewall.service
次のように両方のコンピュータにあります。
[Unit]
Description=Firewall setup via /etc/iptables.rules
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules
[Install]
WantedBy=network-online.target
ご覧のとおり、1つだけ実行するとiptables-restore command
それがすべてです。私はこれを以前に使ったことが/etc/rc.local
ありますが、ファッションに従い、systemd
このような用途に使用する必要があると思います(動作するときは良いです)。
サービスが実際に有効になっています。
[root@bigbrother ~]# systemctl disable firewall
Removed /etc/systemd/system/network-online.target.wants/firewall.service.
[root@bigbrother ~]# systemctl enable firewall
Created symlink /etc/systemd/system/network-online.target.wants/firewall.service → /etc/systemd/system/firewall.service.
手動で実行すると正常に動作します。
[root@bigbrother ~]# systemctl start firewall
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
Loaded: loaded (/etc/systemd/system/firewall.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Sep 09 17:10:52 bigbrother systemd[1]: Starting Firewall setup via /etc/iptables.rules...
Sep 09 17:10:53 bigbrother systemd[1]: Started Firewall setup via /etc/iptables.rules.
私は何を見逃していますか?
ここで似たような質問をいくつか探してみましたが、私に最大の希望を与えた質問は、実際には誤字だったので、今は完全に迷っています。私は別のサーバーで同じバージョンのDebianを実行しているので、これはサービスの順序に関連しているとは信じられません。それにもかかわらず、私は提案に開いています。
答え1
WantedBy=network-online.target
これは基本的に依存関係チェーンの一部ではないため、そのまま使用しないでください。
ネットワークの起動後にスクリプトを起動する必要がある場合は、次のことをお勧めします。
[Unit]
Description=Firewall setup via /etc/iptables.rules
After=network.target
Before=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.special.html#network.target https://www.freedesktop.org/software/systemd/man/systemd.special.html#network-online.target
答え2
たぶん、あまりにも早く実行されたかもしれません。これ文書network.target
方法を説明する主な目的は、終了時にアイテムを正しく注文することです。。
とnetwork-pre.target
反対主にファイアウォールサービスで使用するように設計されています。。ネットワーク構成前に実行したいサービスは、
Before=network-pre.target
Wants=network-pre.target
firewalld.service
たとえば、これが私が考えているFedora 24のユニットで見ることができますiptables
。