Cron作业执行backup.bash

时间:2010-06-08 08:59:54

标签: cron crontab

我希望让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,但它不起作用。

请告知...

Leakhina

2 个答案:

答案 0 :(得分:1)

你应该添加你想要处理这个文件的程序;类似的东西:

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

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

答案 1 :(得分:1)

感谢您的帮助。 现在我能抓住它。

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

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

echo“start ec2-describe-snapshots”&gt;&gt; /var/log/ec2-delete-snapshot.log $ EC2_HOME_BIN / ec2-describe-snapshots&gt;&gt; /var/log/ec2-delete-snapshot.log echo“end it”&gt;&gt; /var/log/ec2-delete-snapshot.log