2013-01-24 3 views
0

Je crée un serveur dans Amazon ec2 et je lui passe un script bash en tant que données utilisateur, qui est exécuté au démarrage initial du serveur. Il comprend une commande pour ajouter une ligne à crontab pour un utilisateur en utilisant la réponse given here.Le script bash fonctionne au démarrage, pas au terminal

directory="/home/intahwebz/current/tools/amazon/" 
command="cd $directory && sh backupSQLToS3.sh" 
job="15 1 */2 * * $command" 
cat <(fgrep -i -v "$command" <(crontab -u intahwebz -l)) <(echo "$job") | crontab -u intahwebz - 

Ce script semble fonctionner correctement au démarrage du système car il affiche aucun message d'erreur et le cronjob est installé dans le crotab.

Cependant, j'aimerais aussi que le script s'exécute pendant les mises à niveau du serveur. Tenter d'exécuter le script à partir de la ligne de commande donne l'erreur:

De quoi ai-je besoin pour corriger cette erreur?

+0

Des sons comme votre shell ne supporte pas la syntaxe '<(...)' (puisque ce sont les seuls '(' sur cette ligne) Peut-être que votre shell interactif est différent de celui qui exécute le script au démarrage? –

Répondre

1

votre approche fonctionne parfaitement pour moi:

$ whoami 
test 

$ echo $SHELL 
/bin/bash 

$ command="cd $directory && sh backupSQLToS3.sh" 

$ job="15 1 */2 * * $command" 

$ crontab -l 


$ cat <(fgrep -i -v "$command" <(crontab -u test -l)) <(echo "$job") | crontab -u test - 

$ crontab -l 

15 1 */2 * * cd && sh backupSQLToS3.sh 

I Missed pour définir la variable « répertoire », mais votre code fonctionne bien pour moi.

+0

Merci - ça a marché pour moi quand je l'ai fait depuis le ligne de commande, et donc j'ai copié et collé tout dans un nouveau fichier de script et il a travaillé là aussi bien.Comparer les deux scripts ont montré que j'avais obtenu un espace supplémentaire au milieu de la première <( – Danack

0

Il semble que vous utilisiez le shell bourne (/bin/sh) pour exécuter un script bash. Essayez d'utiliser bash au lieu de sh.

+0

J'appelle le script 'bash installCrontab.sh' et il a #!/Bin/bash en haut, donc je suis sûr qu'il utilise Bash – Danack

Questions connexes