Aller au contenu

Lancement D'un Script.sh Via Crontab


Messages recommandés

Bonjour,

Mon ip publique change toutes les 24h.

Ne voulant pas payer un service comme DynDNS, je souhaite faire la chose suivante:

1- le syno récupère l'adresse publique en interrogeant un site comme http://monip.org et me l'envoyer par mail.

2- dans un second temps, je souhaite stocker l'ip et interroger régulièrement monip.org pour savoir si elle a changé et seulement dans ce cas-là envoyer un mail avec la nouvelle adresse.

J'ai écrit un script qui génère une copie du site monip.org et qui me l'envoie en pièce jointe.

Manuellement, j'arrive a exécuter le script et tout se passe bien.


sh /volume1/bootstrap/script2.sh

Ce qui cloche c'est lorsque je veux le lancer automatiquement dans crontab. J'ai rajouté la dernière ligne:

#minute houur   mday    month   wday    who	 command

0	   0	   *	   *	   *	   root    /usr/sbin/ntpdate -b time.nist.gov

38	  9	   *	   *	   3,6	 root    /usr/syno/bin/synopkg chkupgradepkg

0	   1	   *	   *	   1,2,3,4,5	   root    /sbin/poweroff

0-59/1  *	   *	   *	   *	   root    bin/sh /volume1/bootstrap/script2.sh >> /volume1/bootstrap/log.txt

~

Au final, un fichier log vide se crée dans le répertoire désiré mais rien de plus, je ne reçois aucun mail. Voilà les infos complémentaires: le script:

#!/bin/sh

wget -O /volume1/bootstrap/adresse.html http://monip.org

echo "Contenu du mail" | /opt/bin/nail -s "Adresse Syno" -a /volume1/bootstrap/adresse.html XXXXXXX@free.fr

rm /volume1/bootstrap/adresse.html

exit;

J'ai installé nail pour l'envoi de mail

J'ai installé crontab pour créer un nouveau crontab

J'ai aussi essayé chmod +x /volume1/bootstrap/script2.sh pour donner les droits d'accès

Sauriez-vous me dire ce qui ne va pas?

Mercii

Lien vers le commentaire
Partager sur d’autres sites

pour ce qui ne va pas : je n'ai pas trouvé au premier coup d'oeil.

Mais : Ne voulant pas payer un service comme DynDNS

moi non plus je ne veux pas payer, mais le service est gratuit.

donc je ne comprend pas pas bien l’intérêt d'éviter un service gratuit pour ne pas payer

Lien vers le commentaire
Partager sur d’autres sites

Ca flood, même ici! Merci de vérifier un minimum comme par exemple en allant sur le site.

http://dyn.com/dns/ --- 20 à 30$ par an pour un compte standard ...

J'ai modifié mon script pour ne pas avoir à envoyer une pièce jointe :


#!/bin/sh

IP="`curl -s http://checkip.dyndns.org/ | grep -o '[[:digit:].]\+'`"

echo "Contenu du mail : $IP" | /opt/bin/nail -s "Adresse Syno" xxxxx@free.fr

exit;

Le script ne se lance toujours pas.

Modifié par pierre68314
Lien vers le commentaire
Partager sur d’autres sites

Toi aussi tu peux vérifier un minimum ....

Dyndns est toujours gratuit si :

- tu as un ancien compte

- si tu t'inscrit aujourd'hui à la période de test gratuite et que tu passe ensuite à l'offre gratuite mais cela nécessite une CB

sinon synology édite un service de dns dynamique gratuit pour tt les processeur de syno

Merci de l'intérêt que tu me portes.

J'ai vérifié plus qu'un minimum... Jusqu'à ce jour je n'avais pas besoin de dyndns vu que j'avais une ip fixe donc je n'ai pas d'ancien compte. La période d'essai gratuite, est comme son nom l'indique "une période de test" de 30 jours au bout de laquelle $20 sont directement prélevés sur ta carte.

Par contre, pour ce qui est du 2e point, tu as entièrement raison, le service s'appelle EZ truc il me semble et ça fonctionne effectivement. (un point pour toi)

Mais maintenant je reste sur ma faim étant donné que mon code est à 2 doigts de fonctionner. C'est rageant de se dire qu'on peut le faire et que l'on n'y arrive pas.

Donc si quelqu'un a envie de résoudre mon problème de code il est le bienvenu.

Modifié par pierre68314
Lien vers le commentaire
Partager sur d’autres sites

Pour ton script :

Dans ton cron, je voit un "bin/sh" tente déjà avec un "/bin/sh" plutot. Tu devrais pouvoir le lancer sans çà d'ailleurs, juste le "/volume1/xxx/script.sh"

Ensuite, dans ton script, met les chemins absolus des executables pour wget et rm (fait un "which PROG" pour avoir le chemin absolu)

Enfin, comme dit plus haut, synology propose un service de DDNS totalement gratuit :)

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses.

@Patrick : je reçois mon ip publique sur mon mail que je consulte de partout. Du coup, de mon travail, je connais l'ip et je peux me connecter au NAS de l'extérieur.

@Bud77 : je vais essayer en mettant un "/" avant. Pour info, j'ai lu ailleurs que je ne mettais peut-être pas le bon chemin vers le shell. Du coup, j'ai utilisé la commande "which" qui m'a indiqué qu'en fait je devais mettre /opt/bin/sh

En changeant cela dans mon script, je peux maintenant le lancer sans mettre "sh" devant.

J'ai lu aussi qu'il fallait placer le script directement "/opt/bin". A mon avis, ça ne doit pas être ça mais je vais tout de même essayer ce soir.

@Bud77 (bis) : je vais passer par la solution proposée par Synology qui est plus souple qu'un envoi de mail. Mais j'aimerai comprendre pourquoi ça ne fontionne pas. ;)

Lien vers le commentaire
Partager sur d’autres sites

Sur syno, tu peux mettre le script ou tu veux, l'essentiel est de bien préciser le chemin complet pour le lancer :)

Par contre, je note un "/opt" et là, çà risque de coincer ...

Opt est le répertoire d'IPKG, et je te déconseille d'y faire appel lors d'un boot par exemple. Tu devrais peut être mettre le shell en /bin/ash (qui existe de base sur le syno, mais /bin/sh devrait aussi exister)

Si j'ai bien compris, si tu le lances directement avec un "./programme.sh" çà tourne ?

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses.

@Patrick : je reçois mon ip publique sur mon mail que je consulte de partout. Du coup, de mon travail, je connais l'ip et je peux me connecter au NAS de l'extérieur.

oui, c'est effectivement une solution. Il y a aussi celle d'&voir un domaine, de le gérer sur le syno en automatisant la mise à jour de la zone avec l'adresse IP

@Bud77 : je vais essayer en mettant un "/" avant. Pour info, j'ai lu ailleurs que je ne mettais peut-être pas le bon chemin vers le shell. Du coup, j'ai utilisé la commande "which" qui m'a indiqué qu'en fait je devais mettre /opt/bin/sh

En changeant cela dans mon script, je peux maintenant le lancer sans mettre "sh" devant.

Pour lancer un script, il y a deux solutions :

- invoquer l’interpréteur de commandes (le shell) en lui fournissant en paramètre le nom du script à lancer

- lancer directement le script, à la condition que celui ci contienne un shebang (chemin de l'interpréteur en ligne 1 précédé de #!) et que le fichier soit exécutable.

Dans les deux cas, il faut le chemin du shell (/bin/ash sur syno)

J'ai lu aussi qu'il fallait placer le script directement "/opt/bin". A mon avis, ça ne doit pas être ça mais je vais tout de même essayer ce soir.

Non. Le script peut être n'importe où. Mais il faut dans ce cas le lancer avec son chemin complet. Si le script est placé dans un répertoire inclus dans le path, il peut être lancé simplement par son nom. Mais en général dans une tâche cron on met toujours le chemin complet car le path n'est en général pas défini pour les tâches cron.

@Bud77 (bis) : je vais passer par la solution proposée par Synology qui est plus souple qu'un envoi de mail. Mais j'aimerai comprendre pourquoi ça ne fontionne pas. ;)

heureusement que ça ne fonctionne pas, tu te vois recevoir un mail toutes les minutes ? il ne faudrait envoyer un mail que si l'adresse a changé (il suffit d'enregistrer l'adresse, puis de comparer la nouvelle avec celle enregistrée)

Lien vers le commentaire
Partager sur d’autres sites

2- dans un second temps, je souhaite stocker l'ip et interroger régulièrement monip.org pour savoir si elle a changé et seulement dans ce cas-là envoyer un mail avec la nouvelle adresse.

Hello Cricx,

Effectivement c'est ce que j'avais dans l'idée de faire dans un second temps. L'envoi toutes les minutes c'est juste pour les tests.

Pour en revenir à mon problème, penses-tu que je devrais remplacer dans mon script le shebang par /bin/ash

Je l'ai changé et je peux lancer mon script en tappant : /volume1/bootstrap/script3.sh mais toujours rien avec CRONTAB

Lien vers le commentaire
Partager sur d’autres sites

Effectivement c'est ce que j'avais dans l'idée de faire dans un second temps. L'envoi toutes les minutes c'est juste pour les tests.

pour l'envoi toutes les minutes, ça marchera mieux avec


*   *   *   *   *       root /volume1/bootstrap/script2.sh >> /volume1/bootstrap/log.txt


n'oublie pas de rendre exécutable le script (chmod +x /volume1/bootstrap/script2.sh)

Pour en revenir à mon problème, penses-tu que je devrais remplacer dans mon script le shebang par /bin/ash

Je l'ai changé et je peux lancer mon script en tappant : /volume1/bootstrap/script3.sh mais toujours rien avec CRONTAB

avec #!/bin/sh ça fonctionne sur un syno.

et si ça marche en lancement direct, ça doit marcher dans la crontab, à la condition que toutes les commandes soient données avec leur chemin absolu.

Lien vers le commentaire
Partager sur d’autres sites

avec #!/bin/sh ça fonctionne sur un syno.

et si ça marche en lancement direct, ça doit marcher dans la crontab, à la condition que toutes les commandes soient données avec leur chemin absolu.

Dans ton script, tu as bien remplacé :

wget par /usr/syno/bin/wget

rm par /bin/rm

echo par /bin/echo

Ah ben ça doit être ça alors, ça doit venir du fait que je n'ai pas mis les chemins absolus DANS le script.

Donc si je te suis ça doit sonner :


#!/bin/sh

IP="`curl -s http://checkip.dyndns.org/ | grep -o '[[:digit:].]\+'`"

/bin/echo "Contenu du mail : $IP" | /opt/bin/nail -s "Adresse Syno" xxxxx@free.fr

exit;

Est-ce que je dois mettre quelque chose en chemin absolu aussi pour: IP="`curl -s http://checkip.dyndns.org/ | grep -o '[[:digit:].]+'`" ? genre /opt/bin/curl ou quelquechose pour "grep"?

Pour en revenir à CRONTAB, ça fonctionne chez moi sans espace puisque le fichier CRONTAB de base n'en contenait pas et que mon syno s'allume et s'éteint bien tout seul. Maiis ayant également lu ça, j'avais déjà remplacé les espaces par des tabulations.

Modifié par pierre68314
Lien vers le commentaire
Partager sur d’autres sites

Tu l'as bien rendu exécutable ? (chmod +x)

oui j'ai fais ça et chmod 777 sans succès.

par contre j'avance un peu maintenant. J'essai de passer la commande dans le CRONTAB sans utiliser par l'appel d'un script.

ça me donne :


*/3	 *	 *	 *	 *	 root /bin/echo "Contenu du mail : `/usr/syno/bin/curl -s http://checkip.dyndns.org/ | /bin/grep -o '[[:digit:].]\+'`" | /opt/bin/nail -s "Adresse Syno" xxxx@free.fr

Je reçois le mail mais sans contenu.

Modifié par pierre68314
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.