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
生涯にわたってファイルを生成できませんでした。NR
gsub
私は次のことを考えています:
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
あなたの例がうまくいかないのは、一重引用符でシェル変数を使用しようとしているため、拡張されずにリテラルとして保持されるためです。-v
forオプションを使用してawk
シェル変数を渡すことができます。
awk -v "LINE=$LINE" -v "APPEND=$APPEND" -v "CONFIG=$CONFIG" 'NR==LINE{gsub(APPEND, APPEND""CONFIG)};1' $FILE > tmp && mv tmp $FILE