【发布时间】:2024-04-29 23:20:02
【问题描述】:
脚本的目的是登录多个服务器并执行 df -k 命令并发送包含类似如下列表的电子邮件: 2016 年 11 月 3 日星期四 12:59:49 EDT
(a******001s02) 上的“/opt (80%)”空间不足
(a*******01s01) 上的“/var (83%)”空间不足
(a*******001s01) 上的“/opt/IBM/ITM (98%)”空间不足
(a*********01s01) 上的“/apps (80%)”空间不足
在 (a********01s01) 上“/opt/wily (80%)”空间不足
我的挑战是: 该脚本必须像 autosys job 一样作为计划作业运行。挑战在于,我相信(不是 100% 肯定),用户名(ssh $username@$host) 应该是 sudo 用户,才能将其作为 autosys 作业运行。但是,如果我将用户名硬编码为 sudo 用户,则 ssh 命令将不起作用。如在 中,我们无法使用用户名作为 sudo 登录到多个服务器。 这里我使用了“logname”,所以 logname 将采用执行命令的用户的名称。但是,如果我必须将其作为 autosys 作业,logname 似乎不起作用。
基本上我想要的是让这个脚本作为一个 autosys 作业运行。目前它工作得很好如果我可以手动运行脚本。我感谢任何帮助。在此先感谢:)
整个脚本:
#Shell script to watch disk space
#!/bin/sh
MAILTO="xxxxxxx@xxxxx.com"
# Set alert level 80% is default
ALERT=70
path=/tmp/Joshma
report=$path/report.txt
date > $report
echo >>$report
servers=$path/serversfile.txt
username=`logname`
for host in `cat $servers`
do
echo "$host"
ssh $username@$host df -k | grep -vE '^Filesystem|tmpfs|cdrom|proc' | awk '{ print $4 " " $7 }' | while read output;
do
echo " $output"
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]
then
echo "Running out of space \"$partition ($usep%)\" on ($host)\n" >>$report
fi
done
done
cat $report | mail -s "File System Space Check" $MAILTO
【问题讨论】:
-
让我感到困惑的是,在远程机器上运行的命令中没有任何内容需要 sudoer 访问权限。您是否收到来自
autosys的错误消息以帮助我们更好地了解您的问题?
标签: shell ssh server login-script autosys