2

我希望让 cron 执行 delete_snapshot.bash,但是当我尝试如下创建 cron 时:
*/1 * * * * /var/www/mango_gis/delete_snapshot.bash >/dev/null
它没有执行我的脚本全部,因为当我没有看到它删除亚马逊云中的快照时,并且我的脚本已经用 bash 进行了测试,它工作正常。

这是我的脚本如下:

#!/bin/bash

get()
{
    local pos=$1
    shift
    eval 'echo ${'$pos'}';
}

length(){ echo $#; }

find_snapshots()
{
    echo $(ec2-describe-snapshots | xargs -n1 basename);
}

snapshots=$(find_snapshots)
len=$(length $snapshots)
row_count=$(($len/6))

if(($row_count > 6)); then
    delete_count=$(($row_count-6))
    for (( i=1; i<=$delete_count; i++ )); do
            ec2-delete-snapshot $(echo $(get $((2+$((6*$(($i-1)))))) $snapshots)) > /dev/null
    done
fi


在上面,我发现问题是我调用了 EC2 命令的一个命令。
我已经测试创建一个 cron 作业来调用此命令是 ec2-describe-snapshots,
但它不起作用。

请指教...

利基纳

4

2 回答 2

1

感谢您一直以来的帮助。现在我可以抓住它了。

问题是 cron 没有加载 env 变量,所以我们只需要在 cron 执行时指定我们用于 env 变量的内容。这是我对 ec2 命令的测试代码,如下所示:

导出 EC2_PRIVATE_KEY=/root/keys/pk-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem 导出 EC2_CERT=/root/keys/cert-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem 导出 JAVA_HOME=/usr/lib/jvm/java-6-sun/ 导出 EC2_HOME_BIN=/usr/bin

echo "开始 ec2-describe-snapshots" >> /var/log/ec2-delete-snapshot.log $EC2_HOME_BIN/ec2-describe-snapshots >> /var/log/ec2-delete-snapshot.log echo "结束它" >> /var/log/ec2-delete-snapshot.log

于 2010-06-10T03:12:52.180 回答
1

您应该添加要处理此文件的程序;就像是:

*/1 * * * * /bin/bash  /var/www/mango_gis/delete_snapshot.bash > /dev/null

使用完整路径很重要,因为您没有在 cron 启动进程时加载环境变量

于 2010-06-08T09:03:24.083 回答