#1 Le 07/05/2011, à 18:28
- Heliox
[Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Bonjour,
Sur un système Debian comme Ubuntu, j'ai remarqué que les paquets téléchargés par APT ou l'outil de mise à jour sont copiés en cache dans le dossier /var/cache/apt. Bien que ce cache puisse être utile, il peut rapidement prendre de la place surtout sur des systèmes à faible capacité. Dès que possible je lance la commande
sudo aptitude clean && sudo aptitude autoclean
Mais comme je m'occupe actuellement d'un PC auquel je ne pourrai bientôt plus accéder physiquement, je voudrais trouver une solution pour exécuter cette commande de manière automatique environ toutes les semaines ou tous les deux jours par exemple.
Si ça avait été un commande ne nécessitant pas les droits de super-utilisateur, je l'aurais placé en fichiers cachés et lancé automatiquement au démarrage de Gnome, mais là je cherche un moyen de le lancer en tant que super-utilisateur mais de sorte à ce que ce soit totalement transparent pour l'utilisateur habituel.
Avez-vous des suggestions ou des solutions à proposer ? Merci d'avance
Dernière modification par Heliox (Le 04/06/2011, à 21:02)
#2 Le 07/05/2011, à 18:45
- sputnick
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Salut,
oui, lance la commande
sudo crontab -e -u root
et tape :
0 0 * * 0 /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
Pour plus de précisions,
man -k crontab
Dernière modification par sputnick (Le 07/05/2011, à 18:46)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 07/05/2011, à 20:19
- Heliox
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Salut,
Merci de ta réponse, c'est exactement ce que je recherchais !
Dans le fichier crantab j'ai mis :
0 11 */7 * 0 /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
Je préfère que le "nettoyage" ne soit pas fait tous les jours mais avec */7 il devrait le faire toutes les semaines de tous les mois non ?
Quant à l'heure, j'ai mis 11, car c'est le moment où le PC est quasi-toujours allumé. Si le PC n'est pas allumé au moment précisé par crontab que se passe-t-il ? la tâche est-elle repoussée au prochain redémarrage ou prochain moment spécifié par la configuration (dans mon cas à savoir la semaine qui suit l'événement manqué) ?
#4 Le 07/05/2011, à 23:01
- sputnick
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Voici la première ligne de ma crontab :
# mn h j/m mois j/s <COMMAND> [LOG]
Ce qui sous entends que
0 0 * * 0 ...
S'execute le 0 - soit - le dimanche, mais comme tu veut, je voit que tui t'es renseigné, tant mieux ^^
Si tu souhaite gérer les commandes non lancées pour cause de machine non allumée, regarder du coté de anacrontab
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 08/05/2011, à 18:04
- Heliox
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Voici la première ligne de ma crontab :
# mn h j/m mois j/s <COMMAND> [LOG]
Ce qui sous entends que
0 0 * * 0 ...
S'execute le 0 - soit - le dimanche, mais comme tu veut, je voit que tui t'es renseigné, tant mieux ^^
Si tu souhaite gérer les commandes non lancées pour cause de machine non allumée, regarder du coté de anacrontab
J'ai fait quelques recherches sur le sujet dans le man et WIkipédia pour comprendre un minimum le fonctionnement de crontab.
Par contre, anacrontab ça se trouve où ? j'ai pas de paquet et la commande est inconnue du système
#7 Le 03/06/2011, à 18:06
- Heliox
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Merci, j'ai continué à chercher sur le sujet récemment.
En fait utiliser anachron à la place de cron est inutile. D'après ce post → http://forum.ubuntu-fr.org/viewtopic.ph … 33#p751633
Anachron lance lui-même les tâches que cron a manqué quand l'ordinateur est éteint.
D'ailleurs à propos de ma commande que je souhaite exécuter toutes les semaines à 11 heures, quelles différences y'a-t-il entre :
0 11 */7 * 0 /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
et
0 11 * * 0 /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
?
Laquelle est donc correcte ?
J'ai un doute car la page crontab de Wikipédia me dit :
@weekly Toutes les semaines 0 0 * * 0
Or la troisième valeur indique le jour, donc la commande serait exécutée tous les jours ou toutes les semaines comme Wikipédia l'affirme ?
D'ailleurs la première commande (aptitude clean) est-elle exécutée en root ? car il n'y a pas la commande /usr/bin/sudo avant… j'ai comme un doute. Est-ce normal ?
Par exemple :
0 11 */7 * 0 /usr/bin/sudo /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
n'est-elle pas plus correcte que :
0 11 */7 * 0 /usr/bin/aptitude clean && /usr/bin/sudo /usr/bin/aptitude autoclean > /dev/null
?
Et passer en sudo de manière automatique pour deux commandes automatisées n'est-ce pas un risque potentiel pour la sécurité ? (à tout hasard…)
Si oui, quel(s) recours possible(s) ?
Dernière modification par Heliox (Le 03/06/2011, à 18:13)
#8 Le 04/06/2011, à 19:23
- Mpok
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
En ce qui concerne la syntaxe, je préfèrerais la standard (donc PAS de '*/7'; où as-tu trouvé cette syntaxe ?). Et pour les semaines, le mieux reste de préciser un jour (5ème champ).
En ce qui concerne Wikipedia, ils ont raison. Cette commande sera exécutée tous les dimanche.
En ce qui concerne les droits : AU SECOURS !!!
JAMAIS un 'sudo' ne devrait être utilisé dans un crontab…
Les crontabs sont par définition restreintes à un utilisateur. Si il y a besoin d'un cronjob avec les droits root, il FAUT le mettre dans la crontab root, PAS dans la crontab utilisateur avec sudo (note : ce qui d'ailleurs, pas testé, ne DEVRAIT pas fonctionner ; ce qui répondrait à la troisième question).
Hors ligne
#9 Le 04/06/2011, à 19:38
- Heliox
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Salut Mpok, merci des infos, je ne savais pas.
sudo crontab -e -u root
Ça c'est donc le crontab du compte root ? Donc j'ai juste à y mettre :
0 11 * * 0 /usr/bin/aptitude clean && /usr/bin/aptitude autoclean > /dev/null
en supprimer les commandes relatives à sudo.
pour le */7 , c'est ce que j'ai déduit du man, je voulais faire tous les jours de la semaine toutes les 7 valeurs, donc tous les 7 jours. Mais si la solution donnée par WIkipédia est plus valable, je vais la garder.
Dernière modification par Heliox (Le 04/06/2011, à 19:47)
#10 Le 04/06/2011, à 20:47
- Mpok
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Ça c'est donc le crontab du compte root ? Donc j'ai juste à y mettre :
0 11 * * 0 /usr/bin/aptitude clean && /usr/bin/aptitude autoclean > /dev/null
en supprimer les commandes relatives à sudo.
Oui, a priori.
À tester, néanmoins…
Hors ligne
#11 Le 04/06/2011, à 20:55
- Heliox
Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?
Je teste dès maintenant.
Y'a-t-il une trace de la bonne exécution de ces commandes dans les fichiers logs ? (probablement dans aptitude.log non ?)
Je vais laisser des paquets télécharger traîner dans le cache d'APT et je verrai bien s'ils disparaissent.
Merci pour votre aide à tous.