Comment puis-je voir / arrêter les tâches crontab en cours d'exécution?

20
  1. Comment voir les tâches crontab en cours?
  2. Comment puis-je arrêter manuellement les tâches crontab en cours?

Est-ce [cette] question de voir les processus cron en cours d'exécution?

Oui

Pour tuer un processus manuellement, une façon consiste à utiliser pkill

J'avais pensé à pkill / killall, mais certaines de mes commandes dans le fichier crontab le sont respectivement! cela signifie qu'après avoir terminé une commande, la suivante sera démarrée! par exemple:

sudo crontab -e
00 10 * * * /usr/bin/wget LINK ; shutdown -h now

Donc, si je tue wget, l'ordinateur sera éteint !!! -> Je veux tuer une tâche cron complètement, pas une partie!

Le pkillproblème suivant : qu'en est-il des scripts? (J'ai importé des scripts bash dans crontab -e) ->sudo pkill ???

mini
la source
Votre question porte sur les processus cron en cours d'exécution? ou la liste des cron-jobs? Veuillez modifier votre question pour être plus clair à ce sujet. Pour arrêter le cron-job en cours, allez ( askubuntu.com/q/272419/66980 )
Mohammad Etemaddar
Édité; 1. oui, en regardant les processus cron en cours d'exécution? (Je veux mettre les processus au premier plan); 2. Ensuite, je veux l'arrêter manuellement?! (hors calendrier crontab)
mini
La meilleure façon d'ajouter des informations supplémentaires à votre question est de la modifier à l'aide du bouton Modifier . C'est mieux visible de cette façon, et les commentaires sont principalement à des fins secondaires et temporaires. Les commentaires sont supprimés dans diverses circonstances. Tout ce qui est important pour votre question devrait être dans la question elle-même.
guntbert

Réponses:

42

Premièrement, utilisez une seule commande par ligne dans crontab. Modifiez cette ligne crontab:

00 10 * * * /usr/bin/wget LINK ; shutdown -h now

il ressemble donc à:

00 10 * * * /path/to/my/crontab/script1.sh

et créez /path/to/my/crontab/script1.shavec ce contenu:

#!/bin/bash
/usr/bin/wget LINK
shutdown -h now

Bien sûr, n'oubliez pas de lui donner la permission d'exécution:

chmod +x /path/to/my/crontab/script1.sh

Deuxièmement, vous pouvez voir l'exécution des tâches crontab, dans un format utile et lisible, dans la sortie de:

ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"

Ils apparaîtront dans les premières lignes, quelque chose comme ceci:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

La première colonne est PID, la deuxième est l'ID de session et la troisième est la commande démarrée par cron. Vous pouvez tuer tous les processus liés à une tâche cron spécifique en utilisant l'ID de session, donc dans l'exemple ci-dessus, vous devez tuer l'ID de session 4289:

pkill -s 4289
Eric Carvalho
la source
1
sh ps: cmd: keyword not found ps: illegal argument: afx
J'obtiens
donc cron ne donne pas un moyen "pratique" pour montrer ses processus?
Cirelli94
@alecrust: Essayez cecips -o pid,sess,cmd -afx | egrep "( |/)cron( -f)?$"
Bulrush
0

Pour tuer un processus manuellement, une façon consiste à utiliser pkill. pkill arrêtera tous les processus qui ont le modèle suivant dans son nom. Par exemple, pour arrêter tous les processus wget, utilisez:

sudo pkill wget
Mohammad Etemaddar
la source
J'avais pensé à pkill / killall, mais certaines de mes commandes dans le fichier crontab le sont respectivement! cela signifie qu'après avoir terminé une commande, la suivante sera démarrée! par exemple: sudo crontab -e=> 00 10 * * * /usr/bin/wget LINK ; shutdown -h now=> Donc, si je tue wget , l'ordinateur sera éteint !!! -> Je veux tuer une tâche cron complètement, pas une partie! le prochain problème de pkill: qu'en est-il des scripts? (J'ai importé des scripts bash dans crontab -e) ->sudo pkill ???
mini
0

changez votre cronjob comme ça

00 10 * * * /usr/bin/wget LINK && shutdown -h now

Cela devrait fonctionner, car &&cela signifie que la deuxième commande n'est exécutée que lorsque la première s'est terminée correctement (retour de l'état 0 à la console / au système), ce qui ne devrait pas être le cas (car le processus a été tué par l'utilisateur et il doit retourner une autre valeur puis 0).

s1mmel
la source