Anacron est lancé chaque jour au démarrage, ou si la machine ne s'est pas éteinte, il est lancé par cron 1 fois par jour (à 7H30, je crois).

Il lance des tâches / logiciels / commandes en fonction d'un paramétrage qui est dans anacrontab, et qui est simple :

délai en jours attente-en-Mn nom commande

Quand on va sur le web on trouve que le délai en jour peut être exprimé en nombre simple, mais aussi en code "@weekly ; @daily ; @monthly ; @yearly". Ce n'est pas dans le man, malheureusement.
J'ai même trouvé @hourly, ce qui n'est logiquement pas possible, puisque anacron n'est pas un daemon.

Il existe une option anacron -T qui teste la syntaxe et indique si on s'est trompé. Or elle laisse passer @monthly et @yearly, mais elle rejette @weekly et @daily.

Savez-vous si c'est anacron -T qui est buggé, ou les sites qui parlent de @weekly et @daily racontent-ils des bêtises ? Les options @weekly et @daily sont-elles valides, ou invalides ?

j'ai bien tenté un anacron -fn pour forcer le lancement : je me disais que si @daily était interdit, cela ne se lancerait pas. Mais en fait, il accepte même @Toto 🙂
Bon, j'ai mis un test avec @daily, donc on verra demain, mais si quelqu'un commaitle sujet ...
> puisque anacron n'est pas un daemon.

Euh si en fait.

> Les options @weekly et @daily sont-elles valides, ou invalides ?

Je crois que tu confonds anacron et cron qui sont deux logiciels différents.

Si tu mets 1 dans la première colonne ça tourne tous les jours.

https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps#using-anacron-with-cron
https://askubuntu.com/questions/848610/confused-about-relationship-between-cron-and-anacron
Vobul a écrit> puisque anacron n'est pas un daemon.

Euh si en fait.
Non, anacron n'est pas un daemon. Il est lancé par cron chaque jour (en tous cas dans la config debian / ubuntu), ET par l'init du système à chaque démarrage, mais ensuite il ne tourne pas en mémoire. Pour t'en convaincre :

ps -e | grep cron renvoi bien un processus (cron est un daemon qui tourne en fond de tâche).

ps -e | grep anacron ne renvoi rien. Anacron n'est pas en mémoire en permanence.
Vobul a écrit > Les options @weekly et @daily sont-elles valides, ou invalides ?

Je crois que tu confonds anacron et cron qui sont deux logiciels différents.
Je ne confond rien du tout, j'indique que moult sites disent que @daily et @weekly fonctionnent avec anacron. Et j'indiquais que anacron -T (qui teste la syntaxe) les rejette. D'où ma question sur le fait de savoir si anacron -T est bugué, ou si ces sites racontent des bêtises.

Réponse : anacron -T est un test qui est bugué [en fait non - voir plus bas]. Pas pu tester @weekly, mais @daily marche parfaitement ce matin chez moi dans anacrontab. Pas très important, mais c'est une bizarrerie. Je me demande ce qu'il en est pour @weekly.
Vobul a écritSi tu mets 1 dans la première colonne ça tourne tous les jours.
Oui, évidement.
Non, anacron n'est pas un daemon.
Au temps pour moi, j'ai lu que ça l'était sans vérifier. Bon après vu qu'il est lancé par un daemon, il l'est indirectement quelque part ^^.

Un truc intéressant pour répondre à ta question, c'est de regarder le code source. @daily ou @weekly n'y apparait pas, par exemple : https://salsa.debian.org/search?utf8=%E2%9C%93&snippets=&scope=&repository_ref=master&search=%40daily&project_id=31867

Mais si ça semble fonctionner, tu peux faire un bug report pour que ce soit ajouté dans la doc et dans le code : https://salsa.debian.org/debian/anacron/-/blob/master/readtab.c#L208-215

T'auras sûrement une réponse plus complète de la part des devs 😉
@Vobul : intéressant, le test sur le code source.

de fait, on trouve :
    jr = obstack_alloc(&tab_o, sizeof(job_rec));
    if (!strncmp ("@monthly", periods, 7)) {
	jr->named_period = 1;
    } else if (!strncmp("@yearly", periods, 7)) {
mais pas @daily. Mais il marche.
En même temps, quand on force l'exécution immédiate avec un @Toto, ça marche aussi (mais pas "toto", par contre). Donc peut être qu'un @n-importe-quoi lance l'opération définie tous les jours. Auquel cas, ce serait juste un fallback de l'erreur de syntaxe.

Je vais tester.
@Tamarou. Utiliser systemD pour remplacer cron, pourquoi pas. Si c'est plus puissant, je suppose que cela peut-être intéressant pour un professionnel.

Pour un particulier, aucun intérêt : trop puissant, trop complexe. Anacrontab, avec ses 4 colonnes (Période-en-jour ; délai-en-Mn ; Nom ; Commande) est beaucoup plus simple, et donc mieux adapté.

Ou alors, il faut un GUI totalement transparent, mais aller trafiquer systemD ne devrait pas non plus être trivial.

Donc à chaque outil son besoin et son type d'utilisateur, je dirais.
Savez-vous si c'est anacron -T qui est buggé, ou les sites qui parlent de @weekly et @daily racontent-ils des bêtises ? Les options @weekly et @daily sont-elles valides, ou invalides ?
Avec systemd c'est possible.

On crée un script qui fait ce que l'on veut. Puis un service qui l'utilise et enfin un timer qui le lance à la fréquence désirée, dont tous les jours ou toutes les semaines. On peut aussi indiquer si on doit rattraper ou non le retard si la machine n'était pas en fonctionnement au moment choisi pour l'exécution.
@grandtoubab : j'avoue ne pas comprendre l’intérêt. Certes tu peux lancer via un daemon quelconque (disons cron) le programme anacron toutes les heures, lequel lancera ensuite une commande quelconque.
Mais pourquoi ne pas tout simplement mettre ton script horaire dans cron ? Ou effectivement passer par systemd
Au fait, je ne trouve pas vraiment l'info : @monthly et @yearly lancent-il l'opération tous les 30 ou 365 J, ou la lance t'il le 1er jour du mois / de l'année ou le PC est lancé ?
Avec cron, je ne sais pas. Mais avec systemd, après avoir choisi une périodicité, on défini aussi le moment de l'exécution.
Tous les mois, le 25 à 17h12.
Toutes les semaines, le jeudi à 5h
Christophe C a écrit@Vobul : intéressant, le test sur le code source.

de fait, on trouve [dans le code d'anacron] :
   jr = obstack_alloc(&tab_o, sizeof(job_rec));
    if (!strncmp ("@monthly", periods, 7)) {
	jr->named_period = 1;
    } else if (!strncmp("@yearly", periods, 7)) {
mais pas @daily. Mais il marche.
En même temps, quand on force l'exécution immédiate avec un @Toto, ça marche aussi (mais pas "toto", par contre). Donc peut être qu'un @n-importe-quoi lance l'opération définie tous les jours. Auquel cas, ce serait juste un fallback de l'erreur de syntaxe.

Je vais tester.
Bon, alors je confirme. Une périodicité = @Toto ou @xxx lance anacron à chque démarrage (donc équivalent à périodicité = 0). C'est donc un simple fallback pour une erreur de syntaxe : au lieu de ne pas l'interpréter, anacron décide de l'interpréter comme signifiant "0" (la différence entre périodicité 0 et 1, c'est 0=lancement à chaque démarrage ; 1 = lancement 1 fois par jour).

Par contre une périodicité = toto (sans @) n'est pas interprétée : anacron ne lance rien.
il faut encore et toujours répéter que anacron base sa périodicité sur la date et heure de démarrage de la machine
at /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

# These replace cron's entries
# périodicité , quelle minute
0 40	cron.hourly 	 run-parts --report /etc/cron.hourly
1 20	cron.daily	 run-parts --report /etc/cron.daily
7 30	cron.weekly	 run-parts --report /etc/cron.weekly
@monthly 50     cron.monthly     run-parts --report /etc/cron.monthly

hourly sera lancé 40 mn après le démarrage puis sur une périodicité d'1 heure
daily sera lancé 20 mn après le démarrage


l'horodatage du dernier lancement est inscrit ici
ls -alrt /var/spool/anacron
-rw------- 1 root root    9 avril 17 07:54 cron.monthly
-rw------- 1 root root    9 avril 29 06:42 cron.weekly
-rw------- 1 root root    9 mai    3 13:04 cron.hourly
-rw------- 1 root root    9 mai    4 09:06 cron.daily

Donc dans mon cas
- le dernier lancement weekly a été le mercredi 29 avril, le prochain sera mercredi 6 mai, 30 mn après le démarrage
- monthly sera lancé le 17 mai, 50 mn après le démarrage

c'est l'interet d'anacron sue un PC qui rédémarre fréquemment

c.f le journal
 journalctl | grep cron
mai 04 08:45:06 debian systemd[1]: Started Trigger anacron every hour.
mai 04 08:45:06 debian systemd[1]: Started Run anacron jobs.
mai 04 08:45:07 debian cron[4509]: (CRON) INFO (pidfile fd = 3)
mai 04 08:45:07 debian anacron[4506]: Anacron 2.3 started on 2020-05-04
mai 04 08:45:07 debian anacron[4506]: Will run job `cron.daily' in 20 min.
mai 04 08:45:07 debian anacron[4506]: Will run job `cron.hourly' in 40 min.
mai 04 08:45:07 debian anacron[4506]: Jobs will be executed sequentially
mai 04 08:45:07 debian cron[4509]: (CRON) INFO (Running @reboot jobs)
mai 04 09:05:07 debian anacron[4506]: Job `cron.daily' started
mai 04 09:05:07 debian anacron[15020]: Updated timestamp for job `cron.daily' to 2020-05-04
mai 04 09:06:45 debian anacron[4506]: Job `cron.daily' terminated (mailing output)
mai 04 09:25:07 debian anacron[4506]: Job `cron.hourly' started
mai 04 09:25:07 debian anacron[15826]: Updated timestamp for job `cron.hourly' to 2020-05-04
mai 04 09:25:37 debian anacron[4506]: Job `cron.hourly' terminated
mai 04 09:25:37 debian systemd[1]: anacron.service: Succeeded.
mai 04 09:25:37 debian anacron[4506]: Normal exit (2 jobs run)
Merci pour ces explications, je suis votre échange avec intérêt.

Il y a quelques années, j'ai eu besoin d'automatiser des tâches et j'ai essayé avec cron/anacron. Quand j'ai dû demander de l'aide, on m'a conseillé de faire avec systemd, ce que j'ai réalisé avec succès.
Au départ cela m'a semblé plus complexe, mais là, à vous lire, je trouve systemd plus clair, même s'il faut peut-être plus d'étapes.

Bonne journée à vous, on approche de la fin du confinement 🙂
salut,
ce que j'ai réalisé avec succès
si tu t'en sers encore, tu peux nous montrer ?
@Watael
Il m'en reste un qui lance le script de sauvegarde de mes données plus quelques bricoles. Et oui, il fonctionne toujours.
Celui là est lancé depuis le compte utilisateur, pas en root.
si t'en as, fais tourner.
Dans ~/.config/systemd/user

Le service : sauvegarde.service
[Unit]
Description=Sauvegarde
 
[Service]
Environment=DISPLAY=:0
ExecStart=/home/toto/sauvegarde.sh
Le timer : sauvegarde.timer
[Unit]
Description=Sauvegarde

[Timer]
OnCalendar=*-*-* 23:00:00
Persistent=false

[Install]
WantedBy=default.target
Pour le wantedby, je ne sais plus son utilité.

Persistent est à false pour éviter qu'il se lance le lendemain matin si j'arrête la machine volontairement avant son heure de déclenchement. En effet il fini par un shutdown now. C'est gênant quand on vient de démarrer 🙂

Bon, il faut aussi activer le timer avec systemctl enable.
Mais Grandtoubab a écrit une page à ce sujet sur son site, et il y a pas mal d'autre doc, dont celle d'ici
https://doc.ubuntu-fr.org/creer_un_service_avec_systemd