我使用crontab -e
来安排shell脚本的执行,该脚本执行ssh调用服务器列表并获取信息并打印到文件。 crontab -l
的输出是:
SHELL = /bin/sh
PATH = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* 1 * * 1,2,3,4,5 /bin/bash /Users/cjones/Documents/Development/Scripts/DailyStatus.sh
我正在运行的脚本将echo "Beginning remote connections..." >> $logfile
的输出记录到文件但是不会将以下循环的输出记录到文件中:
for servers in $(cat hostnames.txt); do
echo "Starting connection to $servers" >> $logfile
(rsync -av /Users/cjones/Documents/Development/Scripts/checkup.sh cjones@$servers:~/checkup.sh > /dev/null
echo""
ssh -t $servers "sudo ./checkup.sh") >> $logfile
echo ""
done
完整脚本的Pastebin:http://pastebin.com/3vD7Bba0
另外请注意,此脚本会将最新版本的管理脚本推送到远程服务器以执行和捕获输出。这种工作在手动运行时有100%的时间。任何帮助都会有所帮助,谢谢!
答案 0 :(得分:1)
您需要SHELL=/bin/sh
和PATH
相同。 =
周围的空格是错误的。
此外,当您使用crontab调用脚本中的文件时,请使用完整路径:
这
for servers in $(cat hostnames.txt); do
echo "Starting connection to $servers" >> $logfile
(rsync -av /Users/cjones/Documents/Development/Scripts/checkup.sh cjones@$servers:~/checkup.sh > /dev/null
echo""
ssh -t $servers "sudo ./checkup.sh") >> $logfile
echo ""
done
到
while read $servers
do
echo "Starting connection to $servers" >> $logfile
(rsync -av /Users/cjones/Documents/Development/Scripts/checkup.sh cjones@$servers:~/checkup.sh > /dev/null
echo""
ssh -t $servers "sudo ./checkup.sh") >> $logfile
echo ""
done < /path/to/hostnames.txt
^^^^^^^^^
请注意while read; do ... done < file
的使用情况,而不是不必要的for host in $(cat ...)
。