跨服务器/用户收集Cron Tab条目

时间:2015-04-09 16:29:44

标签: bash cron aix

苦苦挣扎了几天。尝试创建$ 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行:#

1 个答案:

答案 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

希望这会有所帮助......