
Debian 9 stableを使用してNGINXプロセスと海岸壁ファイアウォールを起動する前に、カスタムシェルスクリプトを起動したいと思います。
- 初期化タスクの実行
/etc
NGINX構成、海岸壁構成、およびオーバーレイをオーバーレイするためにディレクトリ(overlayfs)をマウントします。/etc/hosts
- スクリプトもで終わります
sync
。良い考えなのかはわかりません。
systemctl リスト依存関係
default.target
● ├─display-manager.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
● ├─console-setup.service
● ├─cron.service
● ├ ─dbus.service
● ├─dropbear.service
● ├─myservice.service ..] ● ├─basic.target ● │ ├─-.mount ● │ ├─myservice.service <-- マイサービス実行後
myservice.service 試す 1
[単位]
説明=私の開始 serviceRequires
=shorewall.service nginx.service
Before=shorewall.service nginx.service
[サービス]
RemainAfterExit=yes
ExecStart=/usr/local/bin/myservice start
ExecStop=/usr/local/bin /myservice停止
[インストール]
WantedBy=multi-user.target
WantedBy=basic.target
丸太:
Journalctl [...]
10月12日 11:31:43 server-dev nginx[448]: nginx: /etc/nginx/sites-enabled/defaultのアップストリーム "server-dev.com"の[emerg]ホストが見つかりません: 10月12日 33
11:31:43 server-dev nginx[448]: nginx: 構成ファイル /etc/nginx/nginx.conf テストに失敗しました <== NGINX: BAD
10月12日 11:31 :43 server-dev systemd[1] : nginx.service: 制御プロセスが終了しました。 code=exited status=1
Oct 12 11:31:43 server-dev systemd[1]: 高性能 Web サーバーとリバースプロキシサーバーを起動できません。
10月12日 11:31:43 server-dev systemd[1]: nginx.service: デバイスが障害状態に移行しました。
10月12日 11:31:43 server-dev systemd[1]: nginx.service: '終了コード'のため失敗しました。
Oct 12 11:31:43 server-dev systemd[1]: ターゲットマルチユーザーシステムに到達しました。
10月12日 11:31:43 server-dev systemd[1]: ターゲットグラフィックインターフェイスに到達しました。 10月12日 11:31:43 server-dev systemd
[1]: システム実行レベルの変更に対する UTMP アップデートを開始します。
のシステムUTMPアップデートを開始します。
10月12日 11:31:43 server-dev server[423]: DO: サーバー開始 DONE <== スクリプト終了 myservice 10月12日
11:31:43 server-devshorewall[449]: Shorewall 5.0.15.6 コンパイル中.. < == SHOREWALL: 確認
10月12日 11:31:44 server-devshorewall[449]: /etc/shorewall/shorewall.conf 処理中...
10月12日 11:31:44 server -devshorewall[ 449]: モジュールをロードしています。 ..
myserviceを実行した後、Shorewallシステムが正しく起動します。 Nginxはmyserviceの実行中に適切に上書き(上書き?)される前にほとんど起動されるため、/etc
正しく初期化されません。
myservice.service 2回試行
私も変えようとしていました。
[インストール]
WantedBy=default.target
そして変化
[単位]
before=multiuser.target
それも動作しません。
myserviceが実行された後にnginxとshorewallが起動することを確認する方法は?
答え1
systemdサービスタイプを指定しない場合、デフォルト値はですType=simple
。これは、基本サービスプロセスが分岐したとき(まだコマンドを実行していないときExecStart
)、サービスが開始されたと見なされることを意味します。代わりに、サービスの開始を考慮する前にコマンドが終了するのを待つType=oneshot
この方法を使用できます。詳細はExecStart
参照してください。man systemd.service
答え2
ExecStartPre=
別のオプションを使用する代わりに(またはRequires=shorewall.service
nginxサービスユニットに追加することをお勧めしますが)、プラグインフラグメント設定のオプションを使用してNginxサービスユニットにオプションを追加できます。
このコマンドを使用します(sudo systemctl edit nginx.service
含まれているフラグメント構成のディレクトリが作成されます)。/etc/systemd/system/nginx.service.d
タイプ:
[Unit]
Requires=shorewall.service
After=shorewall.service
または:
[Service]
ExecStartPre=/usr/bin/your_script
これは、nginxサービスユニットを起動する前に常にスクリプトを実行します。IgnoreSIGPIPE=no
サービスセクションに追加する必要があります(シェルスクリプトであり、デフォルトではリダイレクトをサポートしていないため)。それ以外の場合、Systemd はリダイレクト、パイプ、シグナルを無視します。
用途:/etc
NGINX構成、海岸壁構成、および/ etc / hostsをオーバーライドするためにディレクトリ(overlayfs)をマウントします。
サービスセクションに追加:
TemporaryFileSystem=/etc:ro,nodev,noexec,nosuid
これにより、ディレクトリの上部に空のtmpfsマウントポイントがマウントされます/etc
。必要なすべてのファイルBindReadOnlyPaths=
(2つのディレクトリ、5つのファイル)をバインドマウント(、使用)する必要があります。BindPaths=
/etc
ホスト・ファイルをバインド・マウントするには、次のようにします。
BindReadOnlyPaths=/etc/hosts
(openssl、ca証明書、およびネームサービスを;)に追加します。
systemd.exec
スクリプトなしで環境、コンテナ化、ネームスペース、サンドボックス、MAC/IPS を設定します。