Varnishにサイトを追加するときにsedコマンドの繰り返しを防ぐ方法は?

Varnishにサイトを追加するときにsedコマンドの繰り返しを防ぐ方法は?

これはVarnishをインストールするためのスクリプトです。 VPSに新しいサーバー環境を設定するたびに実行します。

cd ~
apt-get update
apt-get install varnish -y
sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/000-default.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain1.tld.conf && a2ensite domain1.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain2.tld.conf && a2ensite domain2.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain3.tld.conf && a2ensite domain3.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain4.tld.conf && a2ensite domain4.tld.conf
mkdir -p /etc/systemd/system/varnish.service.d # Be aware! You might not need this in the future.
cat <<-'VARNISH' > /etc/systemd/system/varnish.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
VARNISH
systemctl restart apache2.service && systemctl daemon-reload && systemctl restart varnish.service

このコードは、特に domain.tld の sed 操作の反復特性に関して、かなり「重い」ようです。

必要に応じて、ニスを削除してすべての変更を元に戻すために使用する同様の長さのコードスニペットがあるため、これは「重くなります」。

私の質問:

インストールスクリプトを全体的に短くし(少なくとも少数の行、おそらく少ないコマンド)、特にsed操作の数を減らすためにどのような戦略を採用しますか?

メモ:

  • 最初にすべきことは、ports.conf、000-default.conf、および各サイトのすべての.confファイルを1つのタスクに統合することです。たぶんforループを介しているかもしれません/etc/apache2/ports.conf/ && /etc/apache2/sites-available/*/

ベストアンサー1

関数とGNU Parallelを使用して重複エントリを置き換えます。

cd ~
apt-get update
apt-get install varnish -y
sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf

myfunc() {
    sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/$1 && 
      a2ensite $1
}
export -f myfunc

parallel myfunc  {/} ::: /etc/apache2/sites-available/*

mkdir -p /etc/systemd/system/varnish.service.d # Be aware! You might not need this in the future.
cat <<-'VARNISH' > /etc/systemd/system/varnish.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
VARNISH
systemctl restart apache2.service && systemctl daemon-reload && systemctl restart varnish.service

おすすめ記事