我必须编写一个脚本来 ssh 进入服务器并截断日志文件。
我的脚本是:
#!/bin/bash
for server in $(cat c10_servers.txt); do
ssh $server "ls /var/log/hello grep -i hello.log. | echo "" | xargs echo "" | sudo tee"
done
这只是显示文件的名称,我想知道我犯了什么错误,因为这不起作用。
答案1
代替:
ls /var/log/hello grep -i hello.log. | echo "" | xargs echo "" | sudo tee
尝试:
for f in /var/log/hello/*hello.log.*; do sudo truncate --size 0 "$f"; done
要通过 SSH 发送此内容,请将其放入单引号,不是双引号:
for server in $(cat c10_servers.txt); do
ssh "$server" 'for f in /var/log/hello/*hello.log.*; do sudo truncate --size 0 "$f"; done'
done
您可以在不使用命令的情况下执行此操作truncate
,但引用会变得更难看:
for server in $(cat c10_servers.txt); do
ssh "$server" 'sudo sh -c '\''for f; do : > "$f"; done'\'' sudo-sh /var/log/hello/*hello.log.*'
done
如果您可以直接以 root 身份进行 SSH,则命令会更简单:
for server in $(cat c10_servers.txt); do
ssh -l root "$server" 'for f in /var/log/hello/*hello.log.*; do : > "$f"; done'
done