2010-06-08 6 views
2

Je souhaite laisser Cron exécute delete_snapshot.bash, mais lorsque je tente de créer Cron comme ci-dessous:
*/1 * * * * /var/www/mango_gis/delete_snapshot.bash>/dev/null
Il n'a pas du tout exécuté mon script, parce que quand je ne l'ai pas vu supprimer l'instantané dans le nuage d'amazon, et mon script est déjà testé avec bash, ça marche très bien.emploi Cron exécuter backup.bash

Voici mon script comme ci-dessous:

#!/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 


En haut, j'ai trouvé le problème est que j'appelle une commande de commande EC2.
J'ai testé pour créer un travail cron pour appeler cette commande est ec2-describe-snapshots,
mais cela ne fonctionne pas.

S'il vous plaît conseiller ...

Leakhina

+0

Comment k maintenant il "n'a pas exécuté le script du tout?" Vous jetez stdout deux fois - une fois dans votre crontab et une fois dans le script lui-même - peut-être le script * est * en cours d'exécution mais une autre erreur est ignorée ou ratée. Que dit votre journal 'crond'? Où vont les erreurs 'crond'? Est-ce qu'un autre cronjob trivial est exécuté (par exemple, '*/1 * * * * logger -p daemon.err -" Je suis un cronjob "')? – pilcrow

+0

Je sais qu'il n'a pas exécuté le script parce que je n'ai pas supprimé l'instantané que je veux supprimer du cloud computing amazon, donc cela n'a pas fonctionné. De toute façon comment puis-je voir cron log? – leejava

+0

vous pouvez définir le fichier journal en utilisant "cron" dans votre syslog.conf – Thariama

Répondre

1

vous devez ajouter le programme avec lequel vous voulez traiter ce fichier; quelque chose comme:

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

en utilisant le chemin complet est important, parce que vous n'avez pas les variables d'environnement chargées lorsque Cron démarre le processus

+0

Je l'ai modifié pour l'aimer */1 * * * */usr/bin/bash /var/www/mango_gis/delete_snapshot.bash>/dev/null mais cela n'a pas fonctionné. – leejava

+0

vous pouvez utiliser "quel bash" sur la ligne de commande pour trouver l'emplacement de votre programme bash. puis mettez ce chemin absolu dans votre travail cron.(l'emplacement des programmes diffère d'un système à l'autre, par exemple j'ai le programme bash sous/bin/bash (à partir de votre édition, il ressemble à votre chemin absolu à bash est le même)) – Thariama

+0

yesh, je fais comme ça aussi, mais cela ne fonctionne toujours pas – leejava

1

Merci pour votre aide à ce jour. Maintenant, je peux l'attraper. Le problème est que cron ne charge pas la variable d'environnement, nous avons donc juste besoin de spécifier ce que nous utilisons pour la variable d'environnement lors de l'exécution de cron. ici est mon code de test pour la commande EC2 comme ci-dessous:

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

echo "Debut EC2-describe-instantanés" >> /var/log/ec2-delete-snapshot.log $ EC2_HOME_BIN/EC2 -descript-snapshots >> /var/log/ec2-delete-snapshot.log echo "finit" >> /var/log/ec2-delete-snapshot.log

+0

c'est exactement ce dont je parlais hier dans les autres commentaires à ma réponse (il faut pousser "montrer x plus de commentaires" pour les voir) – Thariama

Questions connexes