使用Bash脚本配置Filebeat和Logstash时出现“权限被拒绝”

brtdzjyr  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(340)

我正在编写一个脚本,该脚本创建一个logstashconf文件并添加配置,删除现有的filebeat配置文件并创建一个新文件。
我使用的是cat,但是当我运行脚本时,我得到:

./script.sh: /etc/logstash/conf.d/apache.conf : Permission denied
./script.sh: /etc/filebeat/filebeat.yml: Permission denied

这是脚本。我试过使用sudo chown -R。我是否遗漏了什么或者有更好的方法来配置我的文件?

#!/bin/bash
sudo rm /etc/filebeat/filebeat.yml
cat > "/etc/filebeat/filebeat.yml" <<EOF
filebeat.inputs:
- type: filestream
  id: my-filestream-id
  enabled: true

  paths:
    - /home/ubuntu/logs/.*log
setup.kibana:
output.logstash:
  hosts: ["169.254.169.254:5044"]
EOF

sudo touch /etc/logstash/conf.d/apache.conf

sudo cat  > "/etc/logstash/conf.d/apache.conf " <<EOF
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["169.254.169.254"]
  }
}

EOF
gojuced7

gojuced71#

这里的主要问题是重定向如何工作。
根据this answer
所有的重定向(包括〉)都是在执行实际命令之前应用的。换句话说,你的shell首先试图打开/etc/php5/apache 2/php. ini以使用你的帐户进行写操作,然后运行一个完全无用的sudo cat。
通过使用tee(带sudo)而不是cat,您可以轻松地解决问题。然后,您的脚本应如下所示:

#!/bin/bash
sudo rm /etc/filebeat/filebeat.yml
sudo tee "/etc/filebeat/filebeat.yml" << EOF
filebeat.inputs:
- type: filestream
  id: my-filestream-id
  enabled: true

  paths:
    - /home/ubuntu/logs/.*log
setup.kibana:
output.logstash:
  hosts: ["169.254.169.254:5044"]
EOF

sudo touch /etc/logstash/conf.d/apache.conf

sudo tee "/etc/logstash/conf.d/apache.conf" << EOF
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["169.254.169.254"]
  }
}

EOF

相关问题