【问题标题】:Challenge in setting up the script which connects to multiple servers as an autosys job将连接到多个服务器的脚本设置为 autosys 作业的挑战
【发布时间】: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


【解决方案1】:

Autosys 作业中的作业所有者值可以是可以登录到正在执行 AutoSys 作业的服务器的任何用户 ID(机器值)。 AutoSys 代理将生成一个以该用户 ID 执行命令的子进程。如果可以,请使用您正在使用的 ID 作为作业所有者手动运行脚本。如果不能确保您使用的 ID 具有适当的权限来 ssh 到您的服务器并执行命令。作业所有者值在服务器上具有 sudo 不是 AutoSys 要求。

如果脚本手动运行但在使用相同 ID 和服务器的 AutoSys 作业中失败,请开始查看子进程中设置的环境。默认情况下,AutoSys 提供一个通用配置文件,该配置文件可能与使用 ID 手动登录时设置的配置文件不同。您可能必须在作业中设置 profile: value 以获取配置文件以在子进程启动时正确设置环境。

【讨论】: