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 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 smile

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 ! smile
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 wink


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?

sputnick a écrit :

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 wink

J'ai fait quelques recherches sur le sujet dans le man et WIkipédia pour comprendre un minimum le fonctionnement de crontab. smile
Par contre, anacrontab ça se trouve où ? j'ai pas de paquet et la commande est inconnue du système hmm

#6 Le 08/05/2011, à 18:14

sheep

Re : [Résolu] Comment automatiser l'exécution d'une commande régulièrement?

Bonjour,

anacron regarde aussi fcron

Dernière modification par sheep (Le 08/05/2011, à 18:14)


Save water, Drink beer

Hors ligne

#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 :

Wikipédia a écrit :

@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?

Heliox a écrit :

Ç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. wink