Si vous souhaitez planifier un travail Linux qui n'aura lieu qu'une seule fois, cron
c'est exagéré. Les at
la famille de commandes est ce dont vous avez besoin! Et si vous souhaitez exécuter des processus uniquement lorsque votre système dispose de ressources libres, vous pouvez utiliser batch
.
Comment planifier des tâches Linux
Les cron
démon garde une liste des tâches que vous exécutez à des moments précis. Ces tâches et programmes s'exécutent en arrière-plan à l'heure planifiée. Cela vous donne une grande flexibilité dans la planification des tâches qui doivent être répétées.. Si vous devez exécuter une tâche une fois par heure, à une heure précise chaque jour, ou au moins une fois par mois ou par an, vous pouvez le régler sur cron
.
Malgré cela, cela n'aide pas si vous souhaitez planifier une tâche pour qu'elle ne s'exécute qu'une seule fois. Bien sûr, vous pouvez le mettre dans cron
, mais alors vous devez vous rappeler de revenir en arrière et de supprimer le entrée crontab après l'exécution de la tâche, ce qui est gênant.
Avec Linux, si vous êtes aux prises avec un obstacle, c'est presque une garantie que quelqu'un d'autre s'est également battu avec lui. Par chance, parce que les systèmes d'exploitation de type Unix existent depuis si longtemps, De plus, il y a de grandes chances que quelqu'un ait créé une solution à votre problème.
Pour le problème décrit précédemment, ils l'ont fait et ça s'appelle at
.
EN RELATION: Comment planifier des tâches sous Linux: Introduction aux fichiers Crontab
Installation de la commande at
Nous avons dû installer at
sous Ubuntu 18.04 et Manjaro 18.1.0 (il était déjà installé dans Fedora 31).
Installer at
sous Ubuntu, utilise cette commande:
sudo apt-get install à
Une fois l'installation terminée, vous pouvez commencer le at
démon avec cette commande:
sudo systemctl enable --now atd.service
à Manjaro, vous installez at
avec cette commande:
sudo pacman -Sy à
Une fois l'installation terminée, tapez cette commande pour démarrer le at
diable:
sudo systemctl enable --now atd.service
Dans toute distribution, vous pouvez taper cette commande pour vous assurer atd
le démon est en cours d'exécution:
ps -e | grep atd
Comment utiliser la commande at de manière interactive
Utilisation at
, vous devez attribuer une date et une heure pour exécuter. Il y a beaucoup de flexibilité dans la façon dont vous pouvez les écrire, que nous couvrirons plus tard dans ce post.
Malgré cela, même quand on va utiliser at
de manière interactive, vous devez fournir la date et l'heure à l'avance. Si vous n'incluez rien sur la ligne de commande ou saisissez quelque chose qui n'est pas une date et une heure, at
répond avec “Temps illisible”, comme il est montré dans ce qui suit:
à
à la banane
Les dates et heures peuvent être explicites ou relatives. Par exemple, disons que vous voulez qu'une commande s'exécute dans la minute. at
sait ce que cela signifie “maintenant”, donc tu peux utiliser now
et donne-lui une minute, Donc:
à présent + 1 minute
at
imprimer un message et un at
et attendez que vous tapiez les commandes que vous souhaitez programmer. Premier, malgré cela, considérer le message, comme il est montré dans ce qui suit:
Il te dit at
lancer une instance du sh
coquille et volonté exécuter les commandes à l'intérieur de celui-ci. Vos commandes ne s'exécuteront pas dans le shell bash, qui est compatible avec le sh
shell mais a un ensemble plus riche de fonctions.
Si vos commandes ou scripts essaient d'utiliser une fonction ou une installation fournie par Bash, mais sh
il ne le fait pas, échouera.
Il est facile de tester si vos commandes ou scripts s'exécuteront dans sh
. Utilisez le sh
commande pour démarrer un sh
coquille:
sh
L'invite de commande se transforme en signe dollar ($
), et maintenant vous pouvez exécuter vos commandes et vérifier qu'elles fonctionnent correctement.
Pour revenir au shell bash, écrire le exit
commander:
sortir
Vous ne verrez aucun message d'erreur ou sortie standard des commandes. Ceci est dû au fait sh
shell démarre en tâche de fond et s'exécute sans interface écran.
Toute sortie des commandes, bien ou mal, il vous est envoyé par email. Il est envoyé par le système de courrier interne à celui qui exécute le at
commander. Cela signifie que vous devez installer et configurer ce système de messagerie interne.
Beaucoup de (la majorité) des systèmes Linux n'ont pas de système de messagerie interne, car on en a rarement besoin. Ceux qui utilisent généralement un système comme envoyer du courrier O suffixe. Si votre système n'a pas de système de messagerie interne, vous pouvez faire écrire des scripts dans des fichiers ou rediriger la sortie vers des fichiers pour ajouter des enregistrements.
Si la commande ne génère pas de message d'erreur ou de sortie standard, vous ne recevrez de toute façon pas d'e-mail. De nombreuses commandes Linux indiquent le succès par le silence, donc dans la plupart des cas, vous ne recevrez pas d'email.
EN RELATION: Qu'est-ce que stdin, stdout et stderr sous Linux?
Il est maintenant temps de taper une commande dans at
. Pour cet exemple, nous allons utiliser un petit fichier de script appelé sweep.sh
qui efface le *.bak
, *.tmp
, et *.o
enregistrements. Entrez le chemin de la commande, comme il est montré dans ce qui suit, puis appuyez sur Entrée.
Une autre invite de commande apparaît et vous pouvez ajouter autant de commandes que vous le souhaitez. En général, il est plus pratique d'avoir vos commandes dans un seul script et d'appeler simplement ce script de l'intérieur at
.
Présion Ctrl + D pour dire at
vous avez fini d'ajouter des commandes. at
spectacles
Après l'exécution du travail, écrivez ce qui suit pour vérifier votre courrier interne:
courrier
S'il n'y a pas de courrier, doit prendre le dessus sur le succès. De toute façon, dans cette circonstance, vous pouvez vérifier et voir si le *.bak
, *.tmp
, et *.o
Les fichiers ont été supprimés pour confirmer que la commande a fonctionné.
Tapez ce qui suit pour tout recommencer:
à présent + 1 minute
Après une minute, écrivez ce qui suit pour revérifier votre courrier:
courrier
Oye, nous avons du courrier! Pour lire le message numéro un, presse 1 puis appuyez sur Entrée.
Nous avons reçu un e-mail de at
car les commandes du script ont généré des messages d'erreur. Dans cet exemple, il n'y avait aucun fichier à supprimer car lorsque nous avons exécuté le script précédemment, les a éliminés.
Appuyez sur D + Entrez pour supprimer l'e-mail et Q + Entrez pour quitter le programme de messagerie.
Formats de date et d'heure
Vous disposez d'une grande flexibilité en ce qui concerne les formats d'heure que vous pouvez utiliser avec at
. Voici quelques exemples:
- Courir vers 11:00 un m:
- Courir demain à 11:00 un m:
- Courir vers 11:00 une. M. A partir de ce jour la semaine prochaine:
- Courir à cette heure, en ce jour, la semaine prochaine:
- Courir vers 11:00 suis vendredi prochain:
- Courir à cette heure vendredi prochain:
- Courir vers 11:00 suis à cette date, le mois prochain:
- Courir vers 11:00 suis à une date précise:
- Courir à l'intérieur 30 minutes:
- Exécuter dans les deux heures:
- Courir cette fois demain:
- Courir à cette heure le jeudi:
- Courir vers 12:00 un m:
- Courir vers 12:00 après-midi:
- Si vous êtes britannique, vous pouvez même programmer une commande à exécuter à l'heure du thé (4 p. M.):
Regarder la file d'attente des travaux
Vous pouvez écrire le atq
commande pour afficher la file d'attente des travaux planifiés, comme il est montré dans ce qui suit.
Pour chaque commande dans la file d'attente, atq
afficher les informations suivantes:
- Identification de l'emploi
- Rendez-vous programmé
- Heure prévue
- File d'attente où se trouve le travail. Les files d’attente sont étiquetées comme “une”, “b”, etc. Tâches normales avec lesquelles vous planifiez
at
entrer dans la file d’attente “une”, tandis que les tâches que vous planifiez avecbatch
(qui sont discutés plus tard dans ce post) entrer dans la file d’attente “b”. - La personne qui a planifié le travail.
Utilisation de at sur la ligne de commande
Vous ne devriez pas utiliser at
de manière interactive; vous pouvez également l'utiliser dans la commande. Cela facilite l'utilisation des scripts internes.
Vous pouvez diriger des commandes vers at
, comme ça:
écho "sh ~/balayage.sh" | à 08:45 UN M
Le travail est accepté et planifié par at
, et le numéro de travail et la date d'exécution sont signalés comme avant.
EN RELATION: Comment utiliser Pipes sur Linux
Utiliser at avec des scripts
Vous pouvez également stocker un script dans un fichier, puis le transmettre à at
. Il peut s'agir d'un fichier de script en texte brut, il n'est pas nécessaire que ce soit un script exécutable.
Vous pouvez utiliser le -f
(déposer) comme suit pour passer un nom de fichier à at
:
à présent + 5 minutes -f clean.txt
Vous pouvez obtenir le même résultat si vous redirigez le fichier vers at
:
à présent + 5 minutes < nettoyer.txt
Suppression des tâches planifiées de la file d'attente
Pour supprimer une tâche planifiée de la file d'attente, vous pouvez utiliser le atrm
commander. Si vous voulez d'abord voir la file d'attente pour trouver le numéro du travail que vous souhaitez supprimer, vous pouvez utiliser atq
. Ensuite, utiliser ce numéro de travail avec atrm
, Comme indiqué ci-dessous:
et
atrm 11
et
Comment afficher une vue détaillée des travaux
Comme nous l'avons mentionné précédemment, peut planifier des travaux à l'avenir. Parfois, vous pouvez oublier ce qu'un travail va faire. Les atq
La commande affiche les travaux dans la file d'attente, mais pas ce qu'ils vont faire. Si vous voulez voir une vue détaillée d'un travail, vous pouvez utiliser le -c
(chat) option.
Premier, nous utiliserons atq
pour trouver le numéro de travail:
et
Maintenant, nous utiliserons le numéro de travail 13 avec lui -c
option:
à -c 13
Voici une ventilation des informations que nous obtenons sur le travail:
- Première ligne: Cela nous indique que les commandes seront exécutées sous le
sh
coquille. - Deuxième ligne: Nous voyons que les commandes seront exécutées avec un identifiant d'utilisateur et de groupe de 1000. Ce sont les valeurs pour la personne qui a dirigé le
at
commander. - Troisième ligne: La personne qui reçoit les e-mails.
at
envoyer. - Quatrième ligne: Les Masque utilisateur il est 22. Il s'agit du masque utilisé pour déterminer les autorisations par défaut pour tout fichier créé dans ce
sh
session. Le masque est soustrait de 666, ce qui nous donne 644 (l'octal identique derw-r--r--
). - Données restantes: La plupart sont des variables d'environnement.
- Résultats d'un test. Un test vérifie que le répertoire d'exécution peut être saisi. S'il ne peut pas, une erreur est générée et l'exécution du travail est abandonnée.
- Les commandes à exécuter. Ceux-ci sont répertoriés et le contenu des scripts programmés est affiché. Notez que même si le script de notre exemple ci-dessus a été écrit pour s'exécuter dans Bash, fonctionnera toujours sur un
sh
coquille.
La commande batch
Les batch
commander fonctionne de la même manière Al at
commander, mais avec trois différences significatives:
- Vous ne pouvez utiliser que le
batch
commande interactivement. - Au lieu de planifier des tâches à exécuter à une heure spécifique, les ajoute à la file d'attente et le
batch
La commande les exécute lorsque la charge moyenne du système est inférieure à 1,5. - À cause de ce qu'il s'est passé auparavant, ne spécifiez jamais une date et une heure avec le
batch
commander.
Lorsque vous utilisez le batch
commander, l'appelle par son nom sans paramètres de ligne de commande comme celui-ci:
grouper
Ensuite, ajoutez des tâches comme vous le feriez avec le at
commander.
Contrôler l'accès à la commande at
Les at.allow
et at.deny
les fichiers contrôlent qui peut utiliser le at
famille de commandes. Ceux-ci se trouvent dans le /etc
annuaire. Par défaut, seulement le at.deny
le fichier existe et est créé lorsque at
c'est installé.
C'est ainsi que fonctionnent ces:
at.deny
: Lister les applications et entités qui ne peuvent pas être utiliséesat
planifier des travaux.at.allow
: Listes qu'ils peuvent utiliserat
planifier des travaux. Si ilat.allow
Le fichier n'existe pas,at
il suffit d'utiliser leat.deny
Record.
Par défaut, tout le monde peut utiliser at
. Si vous voulez restreindre qui peut l'utiliser, utiliser el at.allow
fichier pour lister ceux qui peuvent. C'est plus facile que d'ajouter tous ceux qui ne peuvent pas utiliser at
Al at.deny
Record.
Ceci est ce que at.deny
le fichier ressemble:
sudo moins /etc/at.deny
Le fichier répertorie les composants du système d'exploitation qu'ils ne peuvent pas utiliser at
. Beaucoup d'entre eux ne peuvent pas le faire pour des raisons de sécurité, donc vous ne voulez supprimer aucun fichier.
Maintenant, nous allons éditer le at.allow
Record. Ajoutons dave
et mary
, mais personne d'autre ne pourra utiliser at
.
Premier, nous écrivons ce qui suit:
sudo gedit /etc/at.allow
Dans l'éditeur, on ajoute les deux noms, comme il est montré dans ce qui suit, puis nous sauvegardons le fichier.
Si quelqu'un d'autre essaie d'utiliser at
, ils vous diront que vous n'avez pas la permission. Par exemple, disons un utilisateur nommé eric
écris ce qui suit:
à
Serait rejeté, comme il est montré dans ce qui suit.
De nouveau, eric
n'est pas dans le at.deny
Record. Dès que vous mettez quelqu'un dans le at.allow
déposer, tous les autres se voient refuser l'autorisation d'utiliser at
.
Idéal pour les occasions exceptionnelles
Comme tu peux le voir, les deux at
et batch
ils sont idéaux pour les tâches que vous ne devez exécuter qu'une seule fois. De nouveau, comme une revue rapide:
- Lorsque vous devez faire autre chose qu'une procédure régulière, programme avec
at
. - Si vous souhaitez exécuter une tâche uniquement lorsque la charge système est suffisamment faible, utilisation
batch
.