web-dev-qa-db-fra.com

Le travail Cron ne lit pas dans la fonction de script Shell

Je rencontre une situation étrange où le travail cron exécute un script et ne lit pas la fonction. Oui, je sais, les éruptions solaires.

Sur une note sérieuse, l’idée ici que j’ai un script .sh qui lance un scan de mon environnement. Ci-dessous, vous pouvez voir l'extrait. Le script crée avec succès le fichier de sortie et je peux trouver cette ligne echo "Is this line parsed or not?" >> $output dans la sortie. Cependant, le prochain écho qui se trouve dans la fonction echo "I'm in the function!" >> $output n'est pas enregistré. Le script s'arrête sur la déclaration de fonction et c'est tout.

Je suis dérouté. Des idées? Merci!

.....
    touch $output
    # with this we are creating an empty file

    echo "Is this line parsed or not?" >> $output

    function do_the_scan() {
    # Load text file lines into a bash array.
    echo "I'm in the function!" >> $output
.....
1
will

Votre syntaxe de déclaration de fonction est incorrecte. Tu devrais utiliser:

do_the_scan() {
    # Load text file lines into a bash array.
    echo "I'm in the function!" >> $output
}

… Sauf si le script est exécuté dans Bash puisque function est un bashisme .

Ceci est une démonstration de l'erreur dans un shell interactif:

> sh
$ function bar() {
sh: 1: Syntax error: "(" unexpected
$

Quoi qu'il en soit, vous devez capturer la sortie d'erreur de votre script en utilisant une redirection de sortie d'erreur standard (par exemple, 2> err.log). Placez-le directement sur la ligne de commande de la crontab afin qu’il puisse capturer les erreurs générées par l’interprète du script.

Voir également

4
Melebius