2010-06-08 110 views
2

我希望让cron执行delete_snapshot.bash,但是当我尝试创建cron时,如下所示:
*/1 * * * * /var/www/mango_gis/delete_snapshot.bash>/dev/null
它根本没有执行我的脚本,因为当我没有看到它删除亚马逊云中的快照,并且我的脚本已经用bash测试过,它工作正常。Cron作业执行backup.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

你怎么k现在它“根本没有执行脚本?”你丢弃stdout两次 - 一次在你的crontab中,一次在脚本本身 - 也许脚本*正在执行,但其他一些错误被丢弃或丢失。 你的'crond'日志说什么? 'crond'错误在哪里去?另一个琐碎的cronjob是否可以运行(例如'*/1 * * * * logger -p daemon.err - “我是一个cronjob”')? – pilcrow 2010-06-09 06:53:02

+0

我知道它没有执行脚本,因为我没有删除我想要从亚马逊云计算中删除的快照,所以它不起作用。任何方式如何查看cron日志? – leejava 2010-06-09 07:26:39

+0

你可以在你的syslog.conf中使用“cron”来定义日志文件 – Thariama 2010-06-09 08:42:15

回答

1

你应该增加与要处理此文件的程序;是这样的:

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

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

+0

我已经将它改成这样了 */1 * * * */usr/bin/bash /var/www/mango_gis/delete_snapshot.bash>/dev/null 但它没有工作。 – leejava 2010-06-09 04:00:23

+0

你可以在命令行中使用“哪个bash”来找出你的bash程序的位置。然后把这个绝对路径放到你的cron作业中。(程序的位置因系统而异,例如我得到了/ bin/bash下的bash程序(从编辑它看起来像你的bash的绝对路径是一样的)) – Thariama 2010-06-09 06:42:34

+0

yesh,我也这样做,但是它仍然不起作用 – leejava 2010-06-09 07:37:37

1

感谢您的帮助迄今。 现在我可以抓住它。

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

出口EC2_PRIVATE_KEY = /根/键/ PK-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem 出口EC2_CERT = /根/键/ CERT-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem 出口JAVA_HOME =的/ usr/LIB/JVM/JAVA-6-太阳/ 出口EC2_HOME_BIN =的/ usr/bin中

回声 “启动EC2-描述快照” >> /var/log/ec2-delete-snapshot.log $ EC2_HOME_BIN/EC2 -describe-snapshots >> /var/log/ec2-delete-snapshot.log echo“end it”>> /var/log/ec2-delete-snapshot.log

+0

这正是我昨天在其他评论中谈论的到我的回答(你需要推“show x more comments”才能看到他们) – Thariama 2010-06-10 06:20:50