サービスファイルに1行追加

サービスファイルに1行追加

Dockerコンテナを構築し、service.nginxファイルを変更する必要があります。

次の変数を定義しました。

LINE=$(cat /usr/lib/systemd/system/nginx.service | grep -n "ExecStart=" | cut -d: -f1)
APPEND=$(cat /usr/lib/systemd/system/nginx.service | grep "ExecStart=")
CONFIG=" -e\ /nginx/nginx.conf"
FILE="/usr/lib/systemd/system/nginx.service"

これらの出力は次のとおりです。

13
ExecStart=/usr/sbin/nginx
-e\ /nginx/nginx.conf
/usr/lib/systemd/system/nginx.service

サービスファイルの13行目を次に変更したいと思います。

ExecStart=/usr/sbin/nginx

到着

ExecStart=/usr/sbin/nginx -e\ /nginx/nginx.conf

複数のコマンドを使用しようとしましたが、awk生涯にわたってファイルを生成できませんでした。NRgsub

私は次のことを考えています:

awk 'NR==$LINE{gsub("$APPEND", "$APPEND$CONFIG)};1' $FILE > tmp && mv tmp $FILE

変更を加えずに新しいファイルを作成するだけです。

答え1

/usr/lib/systemdユーザーは見つかったシステムファイルを変更しないでください。/etc/systemd/systemオペレーティングシステムによって提供される単位ファイルの構成を上書きするために、単位ファイルを配置できます。あなたの場合は、/etc/systemd/system/nginx.service次の内容のみを含むファイルが必要です。

[Service]
ExecStart=/usr/sbin/nginx -e /nginx/nginx.conf

awkあなたの例がうまくいかないのは、一重引用符でシェル変数を使用しようとしているため、拡張されずにリテラルとして保持されるためです。-vforオプションを使用してawkシェル変数を渡すことができます。

awk -v "LINE=$LINE" -v "APPEND=$APPEND" -v "CONFIG=$CONFIG" 'NR==LINE{gsub(APPEND, APPEND""CONFIG)};1' $FILE > tmp && mv tmp $FILE

関連情報