Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/07/2014, à 06:35

arcane17

Programmation cron-crontab / capture planifiée d'un streaming

Bonjour,

Je souhaite utiliser cron pour lancer deux captures de site internet en streaming.
Les deux captures débutent à la même heure mais s'arrêtent à des heures différentes.

Mon problème : comment arrêter les deux captures à des heures différentes en utilisant la commande pkill ?

Par exemple :
Je souhaite capturer le site 1 chaque jour de minuit à 6H
Je souhaite capturer le site 2 chaque jour de minuit à 7H

Pour débuter la capturer j'écris dans Crontab :

0 0 * * 1-7 [wget site 1]

0 0 * * 1-7 [wget site 2]

Pour éteindre la capture je devrais écrire dans crontab :

0 6 * * pkill -s [session id de wget site 1]

0 7 * * pkill -s [session id de wget site 2]

Problème : comment connaître à l'avance ou récupèrer le numéro de session id à indiquer derrière "pkill -s" dans crontab ?

Merci beaucoup pour votre aide !

Dernière modification par arcane17 (Le 30/07/2014, à 13:50)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#2 Le 20/07/2014, à 07:57

nesthib

Re : Programmation cron-crontab / capture planifiée d'un streaming

À la place du wget dans le crontab, utilise plutôt un script qui encapsule le wget. Tu pourras lancer la tâche en arrière plan et créer un fichier qui contient le numéro du processus.

#!/bin/bash
wget site_1 &
echo $! >/tmp/wget1.pid

Le fichier /tmp/wget1.pid contiendra l'identifiant du processus.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 20/07/2014, à 07:59

pingouinux

Re : Programmation cron-crontab / capture planifiée d'un streaming

Bonjour,
Tu peux récupérer le PID d'une commande lancée en arrière plan, et l'écrire dans un fichier temporaire

ma_commande & echo $! >/tmp/pid_de_ma_commande

Pour tuer cette commande plus tard

kill -numéro_du_signal $(cat /tmp/pid_de_ma_commande)

Édité : Je me suis fait devancer…

Dernière modification par pingouinux (Le 20/07/2014, à 08:00)

Hors ligne

#4 Le 20/07/2014, à 08:02

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Génial. Merci pour vos réponse ! Je vais programmer cron ainsi ! Grâce à vos explications, voici les informations que j'ai trouvées :

Kill a process from PID file
Some applications create a PID file - a file that stores the process identifier of the application. The Mongrel server (and I think WEBrick too) creates a PID file in an application’s root directory at e.g. [app]/tmp/pids/mongrel.pid.
You can use the cat command to pass the PID from this file to the kill command in order to terminate the process gracefully.
kill -TERM $(cat tmp/pids/mongrel.pid)
Or send a kill signal, which forces the termination:
kill -KILL $(cat tmp/pids/mongrel.pid)
kill -9 $(cat tmp/pids/mongrel.pid)

Pourquoi utiliser kill -TERM ou kill -KILL ?
Merci.

Dernière modification par arcane17 (Le 20/07/2014, à 08:10)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#5 Le 20/07/2014, à 09:35

Postmortem

Re : Programmation cron-crontab / capture planifiée d'un streaming

Salut,
"kill -TERM" est moins bourrin. Si le programme qui recoit le signal a prévu la capture du signal TERM, il peut faire certaines actions (nettoyer des fichiers temporaires par exemple) avant de quitter. Le programme peut même ignorer ce signal.
"kill -KILL", c'est tuer le programme dès réception de ce signal ; on ne peut capturer ou ignorer ce signal.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 20/07/2014, à 09:44

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

OK, merci. Donc l'idée c'est d'utiliser si possible Kill-TERM, et si cela ne fonctionne pas recourir ensuite à kill-KILL.


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#7 Le 20/07/2014, à 09:50

Postmortem

Re : Programmation cron-crontab / capture planifiée d'un streaming

C'est bien ça


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 20/07/2014, à 12:45

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Merci, à l'usage de tous,  voici quelques lignes de commande pour programmer une capture régulière de site web en streaming à l'aide de Cron.
Lorsque j'aurai achevé les tests, je passerai le sujet en "RESOLU"


Lignes dans crontab

#Programmation téléchargement webradio
0 23 * * 1-7 /bin/sh /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio.sh >> /home/Nom_d_utilisateur/Documents/cronerr.txt 2>&1
#Arrêt du téléchargement
0 7 * * 1-7 kill -TERM $(cat /tmp/pids/webradio.pid)


Contenu du bash webradio.sh

#!/bin/bash
/usr/bin/xterm -e /usr/bin/wget -P /home/Nom_d_utilisateur/Downloads/webradio/ http://[www.adresse_de_la_webradio] &
echo $! >/tmp/pids/webradio.pid

Dernière modification par arcane17 (Le 20/07/2014, à 12:47)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#9 Le 20/07/2014, à 12:58

pingouinux

Re : Programmation cron-crontab / capture planifiée d'un streaming

N'oublie pas de créer le répertoire /tmp/pids

Hors ligne

#10 Le 20/07/2014, à 13:37

Postmortem

Re : Programmation cron-crontab / capture planifiée d'un streaming

Ton script commence par "#!/bin/bash" alors que dans cron, tu l'appelles par "/bin/sh /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio.sh". C'est donc sh qui exécute ton script et non bash.
Dans cron, il faut l'appeler ainsi :

0 23 * * 1-7 /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio.sh >> /home/Nom_d_utilisateur/Documents/cronerr.txt 2>&1

Il faut d'abord le rendre exécutable par la commande :

chmod +x /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio.sh

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#11 Le 20/07/2014, à 14:28

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Ouh là, oui, merci beaucoup c'est une typo subsistance de l'ancienne commande sans bash - j'ai raté l'effacement de ce bout de ligne, mais en fait, sauf erreur de ma part, cela n'empêche pas le fonctionnement. C'est juste  redondant, non ?
[EDIT ce n'est pas redondant : effectivement, je viens de lire la différence entre sh et bash http://stackoverflow.com/questions/5725 … -and-bash]
Effectivement, j'ai rendu exécutable (et testé) le script.
@pinquouinux j'ai créé le répertoire, merci.

Dernière modification par arcane17 (Le 20/07/2014, à 14:43)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#12 Le 20/07/2014, à 15:35

credenhill

Re : Programmation cron-crontab / capture planifiée d'un streaming

hello

arcane17 a écrit :

@pinquouinux j'ai créé le répertoire, merci.

dans le script ?  parce que /tmp est effacé à chaque redémarrage

Hors ligne

#13 Le 20/07/2014, à 16:16

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

credenhill a écrit :

hello

arcane17 a écrit :

@pinquouinux j'ai créé le répertoire, merci.

dans le script ?  parce que /tmp est effacé à chaque redémarrage

Donc comme ci-dessous, n'est-ce pas ?

Contenu du bash webradio.sh

#!/bin/bash
mkdir /tmp/pids
/usr/bin/xterm -e /usr/bin/wget -P /home/Nom_d_utilisateur/Downloads/webradio/ http://[www.adresse_de_la_webradio] &
echo $! >/tmp/pids/webradio.pid


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#14 Le 20/07/2014, à 16:24

credenhill

Re : Programmation cron-crontab / capture planifiée d'un streaming

oui, mais mettre mkdir -p /tmp/pids, si le répertoire existe, il n'y aura pas de message d'erreur

Hors ligne

#15 Le 20/07/2014, à 16:27

jplemoine

Re : Programmation cron-crontab / capture planifiée d'un streaming

Il te faut tester si le répertoire existe...
sinon, au premier lancement, c'est bon mais au deuxième, ça va mettre une erreur puisque le répertoire existe.

if [ ! -d /tmp/pids ]; then
 mkdir /tmp/pids
fi

Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#16 Le 20/07/2014, à 16:27

jplemoine

Re : Programmation cron-crontab / capture planifiée d'un streaming

Je ne connaissait pas le paramètre -p mais ça a l'air plus simple...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#17 Le 20/07/2014, à 18:32

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Merci Credenhill et jplemoine. Cela s'est en outre compliqué du fait que je me suis aperçu que wget lancé en bash crée un fichier log wget-log dont je ne veux pas. Voici la dernière version du script qui remédie à tout cela :

Contenu du bash webradio.sh

#!/bin/bash
mkdir -p /tmp/pids
/usr/bin/xterm -e "echo CAPTURE WEBRADIO EN COURS...; /usr/bin/wget -q -P /home/Nom_d_utilisateur/Downloads/webradio/ http://[www.adresse_de_la_webradio]" &
echo $! >/tmp/pids/webradio.pid

J'ai testé en ligne de commande, cela fonctionne. Je verrai plus tard si cela se confirme dans cron.


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#18 Le 21/07/2014, à 00:13

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Voici donc la syntaxe à suivre et à adapter pour un projet de capture de streaming planifié :

1) Contenu du bash webradio.sh

#!/bin/bash
mkdir -p /tmp/pids
/usr/bin/wget -q -P /home/Nom_d_utilisateur/Downloads/webradio/ http://webradio" &
echo $! >/tmp/pids/webradio.pid


2) Contenu du bash webradio-stop.sh

#!/bin/bash
kill -TERM $(cat /tmp/pids/webradio.pid)


2) Lignes à insérer dans Crontab

#Capture quotidienne de 23H à 6H de webradio
#Démarrage de la capture de la radio
0 23 * * /bin/bash /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio.sh >> /home/Nom_d_utilisateur/Documents/cronerr.txt 2>&1
#Capture du programme diffusé sur le site au format html
15 6 * * 1-7 DISPLAY=:0 /usr/bin/xterm -e /usr/bin/wget -P  /home/Nom_d_utilisateur/Downloads/webradio/Programme -r --level=1 -np http://webradio/program.html  >> /home/Nom_d_utilisateur/Documents/cronerr.txt 2>&1
#Arrêt de la capture de la radio
0 6 * * /bin/bash /home/Nom_d_utilisateur/.local/share/nautilus/scripts/webradio-stop.sh >> /home/Nom_d_utilisateur/Documents/cronerr.txt 2>&1

(je crois que le 1-7 pourrait être remplacé par *)

Merci à tous !

Dernière modification par arcane17 (Le 03/08/2014, à 14:26)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#19 Le 21/07/2014, à 10:19

Postmortem

Re : Programmation cron-crontab / capture planifiée d'un streaming

Salut,
Petite précision concernant cette remarque :

arcane17 a écrit :

Problème que j'avais déjà rencontré. Les instructions dans Crontab ne s'exécutent pas si elles ne sont pas précédées de DISPLAY=:0

Les instructions s'exécutent même si on ne met pas "DISPLAY=:0".
La variable DISPLAY sert à indiquer où doit s'afficher un objet graphique ; dans ton cas, DISPLAY est utile pour la commande "/usr/bin/xterm -e ..." mais pas pour les autres (à moins que le script webradio.sh doive afficher quelque chose à l'écran)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#20 Le 30/07/2014, à 14:20

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

Désolé, je reviens, car le problème résolu ... l'était pas... Merci pour votre aide ! :

La commande suivante ne fonctionne pas quand lancée par CRONTAB
0 7 * * 0-6 kill -KILL $(cat /tmp/pids/webradio.pid)

(j'ai testé beaucoup de variation : kill -9, kill-TERM, etc.)

A titre d'information Je précise que
- La commande suivante fonctionne bien manuellement, quand lancée depuis un terminal :
kill -KILL $(cat /tmp/pids/webradio.pid)
et la commande suivante fonctionne également bien quand lancée depuis CONTAB (mais elle ne correspond pas à ce dont j'ai besoin) :
0 7 * * 0-6 /usr/bin/killall wget

Dernière modification par arcane17 (Le 30/07/2014, à 14:24)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne

#21 Le 30/07/2014, à 16:08

nesthib

Re : Programmation cron-crontab / capture planifiée d'un streaming

crontab n'est pas un shell bash, il n'interprétera pas correctement $(…)
Mets tes commandes dans un script (avec #!/bin/bash sur la première ligne) et appelle le script (ou au pire, remplace $(…) par `…`, mais c'est moins propre qu'un script je trouve).


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#22 Le 03/08/2014, à 14:44

arcane17

Re : Programmation cron-crontab / capture planifiée d'un streaming

@nesthib : super, merci beaucoup. C'était bien la solution : passer par un script. J'ai mis à jour les instructions du message #18.

J'ai une question additionnelle :

pourquoi dans un terminal
/usr/bin/xterm -e /bin/bash /home/nom_d_utilisateur/.local/share/nautilus/scripts/script.sh
ne fonctionne pas ?

(sachant que la succession de commande
dans un terminal  : /usr/bin/xterm
puis dans la fenêtre xterm, la commande :  /bin/bash /home/nom_d_utilisateur]/.local/share/nautilus/scripts/script.sh
fonctionne bien)

Merci !

Dernière modification par arcane17 (Le 03/08/2014, à 14:47)


Son : **Triangle**, Audio Analogue, Atoll, Focal, Teac, HRT, Advance Acoustic

Hors ligne