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.

#26 Le 09/02/2024, à 15:53

Christophe C

Re : crontab et anacron

bruno a écrit :

Ma critique concerne l’aberration de la manip proposée dans la doc : appeler anacron depuis ~/.profile au lieu d'utiliser directement ce dernier.

Ben je le fait, ça ne me gêne pas. mais effectivement c'est compliqué. Si je devais rebatir quelque chose, je ne le ferais sans doute plus.

En même temps on a pas besoin de cela sauf pour un affichage graphique, c'est un tout petit cas d'usage. Et pas le meilleur, effectivement.

L'avantage de anacron c'est que c'est simple, alors je t'accorde que le compliquer avec ce type d'utilisation ce n'est pas super malin. Si on veut sortir de la logique "2CV" (donc du anacrontab standard), autant utiliser autre chose.

Dernière modification par Christophe C (Le 09/02/2024, à 15:53)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#27 Le 10/02/2024, à 11:56

arvernes

Re : crontab et anacron

soshy a écrit :
arvernes a écrit :

D'auter part, vu que dans mon script l'action doit être déclenchée alors que je ne suis plus dans une session, j'ai fait ce qui est conseillé, à savoir

C'est très bien de vouloir faire un service au niveau de l'utilisateur, mais puisque c'est une action qui doit être déclenchée alors que tu n'es pas forcément connecté à ta session, pourquoi tu ne passes pas par un service au niveau du système directement ?

Oui, j'ai changé un peu mon fusil d'épaule, c'est une tâche que je souhaite qui se fasse lorsque je suis logué. Donc dans le xx.timer j'ai mis un paramètre "Persistent=true" pour que si la machine était à l'arrêt lors du déclenchement prévue, dès que je me logue, la tâche est lancée. Pour cela j'ai rajouté "OnStartupSec=20seconds", j'ai mis aussi une ligne OnCalendar= xxxxx pour la tâche soit répétée toutes les xx heures pendant que je suis devant l'ordi.
Mais pour le moment, je n'arrive pas à lui faire faire ce que je veux. Lors de la vérif du status, j'ai droit à un point rouge au niveau de Triggers: Je continue à bouquiner et à tester. Affaire à suivre, mais pas facile.

Hors ligne

#28 Le 10/02/2024, à 14:58

arvernes

Re : crontab et anacron

Ouf, ça y est. J'ai enfin réussi à faire ce que je veux et ça fonctionne. La documentation sur ça est vraiment disparate, on trouve des infos, mais parfois, elle se contredit, notamment en ce qui concerne "WantedBy=". On trouve parfois des options dans le cadre [Unit] dans une documentation et on ne la retrouve pas dans le reste. Cela reste quand même assez floue, surtout pour un novice comme moi.

Pour les personnes très habituées à manipuler ces fichiers, question : je voudrais mettre 2 fonctions ExecStart= mais il semble que pour que cela soit possible, il me fait mettre un Type=oneshot. si je ne mets rien ou un Type=simple, j'ai droit à une erreur dans la vérification.

Autre question : dans la partie ExecStart= je lance un script avec deux paramètres, ça marche très bien maintenant. Cependant, je voudrais rajouter l'écriture dans un fichier log de mon choix. Puis-je faire quelque chose comme ça :

ExecStart=/media/misc/scripts/backup_des_bases_de_donnees 61 zip && /bin/bash -c "echo Simple service - start && sleep 60 && echo Simple service - end"

Ou dois-je faire un deuxième xxx.service, et mettre dedans quelque chose comme :

[Unit]
Description=Ecriture de fin de backup service
After=mon_script_de_backup.service
Requires=mon_script_de_backup.service

[Service]
ExecStart=/bin/bash -c "/bin/bash -c "echo Simple service - start && sleep 60 && echo Simple service - end""

merci

Dernière modification par arvernes (Le 10/02/2024, à 15:04)

Hors ligne

#29 Le 10/02/2024, à 15:42

bruno

Re : crontab et anacron

arvernes a écrit :

La documentation sur ça est vraiment disparate, on trouve des infos, mais parfois, elle se contredit, notamment en ce qui concerne "WantedBy=".

La seule documentation qui vaille est la documentation officielle : exemple pour WantedBy

Pour les logs il faut le gérer dans le script où en redirigeant la sortie de ta commande vers un fichier de logs. Sion chaque service systemd a son propre journal accessible avec journalctl -u nom_de_l_unite.service

Dernière modification par bruno (Le 10/02/2024, à 16:01)


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#30 Le 10/02/2024, à 15:49

geole

Re : crontab et anacron

Bonjour
Tu peux utiliser des pré-services ( Mais si l'un se plante,   c'est fichu  ) et des post-service.


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit,  utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir  https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#31 Le 11/02/2024, à 19:52

soshy

Re : crontab et anacron

Les logs du service sont automatiquement dans journald.

Si tu veux, tu peux les mettre directement dans un fichier en utilisant

StandardOutput=/chemin/vers/fichier.log
StandardError=/chemin/vers/fichier.err

Cependant, c'est bof comme solution car les logs sont en dur et ça écrit dedans à l'infini et un jour on se retrouve avec un fichier de 300Go.

Le mieux, c'est d'utiliser

SyslogIdentifier=mon_super_service

Avec ça, tu fais un fichier mon_service.conf dans /etc/rsyslog.d/

if $programname == 'mon_super_service' then /chemin/vers/mon/fichier.log
& stop

Et ô miracle, toutes les sorties de ton programme arrivent dans le fichier, avec date d'exécution etc.

Après pour aller encore plus loin, tu peux coupler ça avec logrotate !
Un fichier mon_super_service dans /etc/logrotate.d/ avec

/chemin/vers/mon/fichier.log {
    rotate 12
    monthly
    missingok
    compress
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Et là, en plus d'avoir un fichier de log, ça rotate le fichier tous les mois, ça compresse l'ancien, et ça en garde 12 (donc 1 an avec une rotation mensuelle comme dans mon exemple)


Enfin, si tu veux rajouter une ligne de log avant et après exécution j'imagine que tu peux juste faire du genre

ExecStart=/bin/bash -c "echo 'debut' ; /ma/super/commande ; echo 'fin'"

Mais je pense que tu risques de perdre l'information d'une sortie en erreur de la commande

Dernière modification par soshy (Le 11/02/2024, à 20:13)

Hors ligne

#32 Le 12/02/2024, à 07:32

arvernes

Re : crontab et anacron

soshy a écrit :

Les logs du service sont automatiquement dans journald.

Si tu veux, tu peux les mettre directement dans un fichier en utilisant

Whoua, je vais me pencher sur tout ce que tu mets, ça me plait bien, le logrotate m'a l'air d'être une excellente solution.
Pour le moment j'avais fait par le biais de mes fichiers .service :

[Service]
Type=oneshot
ExecStartPre=/usr/bin/bash -c '/usr/bin/echo  etc.....' 
ExecStart=ma commande qui va bien
ExecStopPost=/usr/bin/bash -c '/usr/bin/echo -e "                  * etc.....-----------------------------------" >> /mon/chemin/vers/mon/log' 

Ca a le mérite de bien marcher, mais ça ne me nettoie pas mon log. Pour le faire, mais je vais aller vers tes solutions, j'avais rajouté un cron dans ma crontab pour le virer tous les lundis.

59 06 * * 1 echo -e "           Fichier log des backups\n" > /mon/chemin/vers/mon/log

Mon souci et je n'ai pas réussi à le résoudre, est qu'au démarrage de l'ordinateur ça me lance automatiquement ces tâches. Je n'arrive pas à comprendre pourquoi car j'ai supprimé dans le timer une option que j'avais rajoutée à savoir "Persistent=true". Je me suis rendu compte de mon erreur, j'ai supprimé cette option, fait un stop, un disable, un daemon-reload, etc... mais pas moyen, dès le démarrage, ça me relance l'ExecStart.
Dans le .timer, j'ai :
[Timer]
Unit=fm_backup_databases.service
OnStartupSec=6min 10sec
OnCalendar= *-*-* 0/5:04:00

Donc logiquement, si l'ordi est allumé à 6h00, il a loupé le backup de 5h00, mais vu que l'option Persistent=true n'est pas mise il ne devrait pas lancer la commande, celle-ci devrait être lancée que 6mn et 10sec après le démarrage de la session. Donc, dans ce que j'ai compris, si j'allume l'ordi à 6h00 du matin, la tâche devrait être lancée à : 6h 06m 10s puis à 10h 04, puis 15h 04, etc... mais là, ce n'est pas le cas, il me lance la tâche dès le démarrage de la session, puis à 6h 06m 10s, puis 10h04, etc...
y'a un truc qui m'échappe. Je me suis demandé si il n'avait pas gardé une trace de mes premiers essais avec l'option Persistent=true, mais vu que les fichiers de service et timer sont dans ~/.config/systemd/user/ (j'utilise les commandes avec l'option --user), je ne vois rien de persistant là dedans.

Hors ligne

#33 Le 12/02/2024, à 10:02

arvernes

Re : crontab et anacron

Je poste la solution que je viens de trouver, si ça peut servir à quelqu'un.
La solution je l'ai trouvée là, sur unix.stackexchange
La partie intéressante est là :

if no:
    make sure the timer unit doesn't have a dependency on your 
    service (Requires=<service-unit> or something dumb like that)

Il faut pas mettre dans la section [Unit] du .timer la commande qui disait qu'il avait besoin du .service (du même nom) avec une ligne Requires=.

[Unit]
Description="Run backup_etc...."
Requires=fm_backup_databases.service

et là, enfin ça marche comme prévu.

Hors ligne

#34 Le 14/02/2024, à 18:00

arvernes

Re : crontab et anacron

soshy a écrit :

Et là, en plus d'avoir un fichier de log, ça rotate le fichier tous les mois, ça compresse l'ancien, et ça en garde 12 (donc 1 an avec une rotation mensuelle comme dans mon exemple)

Bon ben là, je n'ai pas réussi. J'ai pourtant tout fait, enfin il me semble, j'ai bien relancé "systemctl restart syslog" pour que la sortie aille dans le fichier log et le chemin que j'ai spécifiés, mais ça ne marche pas. Je recherche mon erreur. Si je trouve, je reviens pour indiquer ce que j'ai pu oublier ;-)

Hors ligne