我希望让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
答案 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