#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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
@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
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 :
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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