苦苦挣扎了几天。尝试创建$ host $ useraccount $ crontab条目的空格分隔列表。
我尝试过几种不同的方法。每一次都以不同程度的灾难结束,我最接近的就是这个,有人指出了我遗漏的显而易见的事情。
#!/usr/bin/bash
#Global Crontab Inventory for Scripts
#
outputfile="/localpath/cronoutput.txt"
LPARLIST=/pathto/LPAR.txt
while read LPAR;
do
ping -c 1 $LPAR > /dev/null
if [ $? -eq 0 ]; then
for user in $(ssh -n $LPAR /opt/freeware/bin/ls /var/spool/cron/crontabs);
do
while read line;
do
echo "$LPAR $user $line"
done <"$(ssh -n "$LPAR" /opt/freeware/bin/tail -n +29 /var/spool/cron/crontabs/$user)"
done
fi
done <$LPARLIST
似乎在抱怨尝试将尾部的输出作为命令执行。
./ crons.sh:第11行:(几页裁剪的cron条目):文件名太长
./ crons.sh:line 11 ::没有这样的文件或目录
./ crons.sh:11行:#
答案 0 :(得分:0)
这对我有用。
#!/bin/bash
#Global Crontab Inventory for Scripts
#
outputfile="/localpath/cronoutput.txt"
LPARLIST=LPAR.txt
cat $LPARLIST |
while read LPAR;
do
ping -c 1 $LPAR > /dev/null
if [ $? -eq 0 ]; then
for user in $(ssh -n root@$LPAR ls /var/spool/cron/crontabs);
do
ssh -n "root@$LPAR" tail -n +29 /var/spool/cron/crontabs/$user |
while read line;
do
echo "$LPAR $user $line"
done
done
fi
done
我更喜欢cat xxx | while ...
,而不是像你那样重定向输入。理论上应该是一样的。我没有发现任何特别错误,我没有真正改变任何东西 - 只是重新安排了你的东西。
cat xxx | while ...
技术的优点是可以在cat和while之间插入命令。在这种情况下,我不会做尾部-n +29,因为你猜测前29行是垃圾,但可能不是这样。相反,我只是做一个文件的猫,然后egrep出以哈希#
开头的行。再次,......是的,猫是多余的,但谁真的在意。添加和删除内容更为通用,更容易。
我没有安装/opt
软件包,除非绝对必要,否则我不会依赖它们。您正在增加依赖性。所以我只使用了当地的“ls”和“tail”。我还添加了一个明确的root@
但你不需要它。它只是简化了我的测试。
也许ls溢出来了。试试这个:
#!/bin/bash
#Global Crontab Inventory for Scripts
#
outputfile="/localpath/cronoutput.txt"
LPARLIST=LPAR.txt
cat $LPARLIST |
while read LPAR;
do
ping -c 1 $LPAR > /dev/null
if [ $? -eq 0 ]; then
ssh -n root@$LPAR ls /var/spool/cron/crontabs |
while read user
do
ssh -n "root@$LPAR" tail -n +29 /var/spool/cron/crontabs/$user |
while read line;
do
echo "$LPAR $user $line"
done
done
fi
done
希望这会有所帮助......