tl;dr
プロビジョニング未満の粒度の作業に対して。
- ポイント①: ローカルからリモートホスト上でsudoを扱う場合は、pssh実行時に、 -x '-tt' を付与してコマンド実行する
- ポイント②: 1行のみ追記したい場合は sh -c オプションでコマンドを渡せばOK
- ポイント③: 複数行ヒアドキュメントでroot権限下のファイルを追記する場合は、'EOT'のようにシングルクオテーションまたはダブルコーテーションで囲む
内容
環境
CentOS Linux release 7.3.1611 (Core)
状況(例)
filebeatサービスをCentOS7にインストールする
ローカルの実行コマンド
ポイント①
$ pssh -P -x '-tt' -h web-hosts -I < web.sh
リモートホスト一覧
$vi web-hosts
172.21.102.xx
172.21.102.xx
172.21.102.xx
...
リモートホスト上の実行コマンド
$vi web.sh
#!/bin/bash
cd /tmp
curl -L -O https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm
sudo rpm -ivh filebeat-1.2.3-x86_64.rpm
echo "filebeat was installed"
sudo mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat_yml_org
# ポイント②
sudo sh -c 'echo 172.21.103.237 logstash-01 >> /etc/hosts'
# ポイント③
sudo cat << 'EOT' | sudo tee /etc/filebeat/filebeat.yml
filebeat:
prospectors:
-
paths:
- /apphome/MetaData/log/*
- /var/log/httpd/access_log
- /var/log/httpd/error_log
input_type: log
multiline:
pattern: "^[[:digit:]]{4}"
negate: true
match: after
registry_file: /var/lib/filebeat/registry
output:
logstash:
hosts: ["logstash-01:5044"]
shipper:
logging:
EOT
sudo systemctl restart filebeat
echo "all process were done."
exit 0
参照
sh -c へ引数を渡す
http://uyota.asablo.jp/blog/2012/08/28/6557461
スーパーユーザー権限が必要なファイルにcatコマンドでテキストを書き込む。
http://blog.katty.in/3922
bashのヒアドキュメントを使ったスクリプトの作成
http://te2u.hatenablog.jp/entry/2015/05/12/001915