logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 22-09-2022 18:28:02

Pierre16
Membre
Distrib. : Bookworm
Noyau : Linux 6.1.0.11-amd64
(G)UI : XFCE 4-12
Inscription : 26-01-2017

Lancer uptadedb au démarrage [Résolu]

Bonjour,

Je souhaiterai lancer uptadedb au démarrage de ma session avec systemd.
Est-ce possible ?
Comment faire ?
Commencer par préparer un fichier /etc/systemd/system/.......
Je n'ai pas tout compris et je ne sais pas aller plus loin à cause de mon manque d'expérience.

Merci pour vos conseils.

Dernière modification par Pierre16 (23-09-2022 09:17:00)

Hors ligne

#2 22-09-2022 20:12:07

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Lancer uptadedb au démarrage [Résolu]

Hello,

Oui c'est possible.
Mais je me demande si updatedb n'est pas déjà exécutée à chaque démarrage, c'est une information que je ne trouve pas.

Edit:
En fait si, sur Debian, il existe ce fichier : /etc/cron.daily/locate

# cron script to update the `locatedb' database.


Et il est lancé tout les jours par cron.

Edit2:
On trouve dans /etc/crontab :

25 6  * * * root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )


Ce qui veut dire exactement que tous les jours à 6h25 tester si anacron est présent sinon exécuter les scripts du répertoire /etc/cron.daily (dont le script locate).
Avec anacron (installé de base), c'est encore plus simple : les scripts du cron.daily sont exécutés au 1er démarrage de la journée (si la correspondance de l'heure est dépassée).


----

Sinon, pour créer un service système, il faut placer ce service dans /etc/systemd/system.
Il est préférable de donner l'extension .service à ce nouveau fichier.
Le contenu (pour ce que tu veux faire) serait :

[Unit]
Description=Lancer updatedb

[Service]
Type=simple
Exec=/usr/bin/updatedb

[Install]
WantedBy=default.target

Appelons ce fichier updatedb.service (placé dans /etc/systemd/system).

Ensuite pour activer ce service, lancer cette commande :

systemctl enable updatedb.service



Il faut prendre en compte que la commande updatedb peut être longue.
Et donc le service nouvellement créé peut ralentir le démarrage du PC.

Dernière modification par Tawal (22-09-2022 20:39:44)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#3 22-09-2022 22:27:57

Pierre16
Membre
Distrib. : Bookworm
Noyau : Linux 6.1.0.11-amd64
(G)UI : XFCE 4-12
Inscription : 26-01-2017

Re : Lancer uptadedb au démarrage [Résolu]

Bonsoir,
Quand j'utilise updatedb en terminal,tout va bien.
Voici le fichier que j'ai créé.
Ensuite,le lancement me donne commande introuvable .... bizarre

pit16@PC-PIT16-DE:~$ cat /etc/systemd/system/updatedb.service

[Unit]
Description=Lancer updatedb

[Service]
Type=simple
Exec=usr/bin/updatedb

[Install]
WantedBy=default.target
 



root@PC-PIT16-DE:~#[b] systemctl enable updatedb.service[/b]
-bash: systemctl enable updatedb.service : commande introuvable
 



root@PC-PIT16-DE:~# [b]systemctl status updatedb.service[/b]
● updatedb.service - Lancer updatedb
     Loaded: bad-setting (Reason: Unit updatedb.service has a bad unit file set>
     Active: inactive (dead)

sept. 22 23:05:43 PC-PIT16-DE systemd[1]: /etc/systemd/system/updatedb.service:>
sept. 22 23:05:43 PC-PIT16-DE systemd[1]: updatedb.service: Service has no Exec>
lines 1-6/6 (END)...skipping...
● updatedb.service - Lancer updatedb
     Loaded: bad-setting (Reason: Unit updatedb.service has a bad unit file setting.)
     Active: inactive (dead)

sept. 22 23:05:43 PC-PIT16-DE systemd[1]: /etc/systemd/system/updatedb.service:7: Unknown key name 'Exec' in section 'Service', ignoring.
sept. 22 23:05:43 PC-PIT16-DE systemd[1]: updatedb.service: Service has no ExecStart=, ExecStop=, or SuccessAction=. Refusing.
~
 



Que penser de tout cela ?

Dernière modification par Pierre16 (22-09-2022 22:30:38)

Hors ligne

#4 23-09-2022 08:35:33

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Lancer uptadedb au démarrage [Résolu]

J'en pense que j'ai commis une erreur dans le fichier /etc/systemd/system/updatedb.service (et toi aussi d'ailleurs) :
La ligne Exec devrait être :

ExecStart=/usr/bin/updatedb


Désolé sad
Mais n'oublie pas de mettre / devant usr cette fois-ci.

Chacun son lot tongue


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#5 23-09-2022 09:16:11

Pierre16
Membre
Distrib. : Bookworm
Noyau : Linux 6.1.0.11-amd64
(G)UI : XFCE 4-12
Inscription : 26-01-2017

Re : Lancer uptadedb au démarrage [Résolu]

OK,ça marche !!

Désolé pour ce contretemps et encore merci pour ton aide.

Je passe en résolu.

Hors ligne

#6 23-09-2022 09:22:08

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Lancer uptadedb au démarrage [Résolu]

Hello
A ba grillé par Tawal tongue
j'avais pas vu l'erreur du premier coup , et c'est quand j'ai lu un autre poste que j'ai vu
https://debian-facile.org/viewtopic.php?id=30105

systemd-analyze verify "updatedb.service"


/etc/systemd/system/updatedb.service:7: Neither a valid executable name nor an absolute path: usr/bin/updatedb
updatedb.service: Unit configuration has fatal error, unit will not be started.
Unit updatedb.service has a bad unit file setting.



par contre j'aurais mis oneshot a la place de simple

cat /etc/systemd/system/updatedb.service


[Unit]
Description=Lancer updatedb
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/updatedb

[Install]
WantedBy=default.target



après modification

systemctl daemon-reload



systemctl status updatedb.service


○ updatedb.service - Lancer updatedb
     Loaded: loaded (/etc/systemd/system/updatedb.service; enabled; preset: enabled)
     Active: inactive (dead)



Pierre16 a écrit :

root@PC-PIT16-DE:~# systemctl enable updatedb.service
-bash: systemctl enable updatedb.service : commande introuvable



cette commande doit impérativement fonctionner, assure toi de passer en root avec

su -


systemctl enable updatedb.service


Created symlink /etc/systemd/system/default.target.wants/updatedb.service → /etc/systemd/system/updatedb.service.



note que je met les commandes en user car policykit se charge de demander une augmentation de privilège par le biai d'une petite fenêtre popup, les taper en root doit revenir au meme je pense


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#7 23-09-2022 12:48:38

Pierre16
Membre
Distrib. : Bookworm
Noyau : Linux 6.1.0.11-amd64
(G)UI : XFCE 4-12
Inscription : 26-01-2017

Re : Lancer uptadedb au démarrage [Résolu]

OK,j'ai modifié suivant Croutons ....

Tout va bien,merci.

Hors ligne

#8 23-09-2022 20:03:25

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Lancer uptadedb au démarrage [Résolu]

Bah en relisant le man systemd.service, je trouve plus intéressant de mettre le type en simple plutôt qu'en oneshot.
Car en oneshot, le démarrage des autres unités de service ne démarrent qu'une fois fini le type oneshot.
En type simple, le service est considéré démarré et OK dès son lancement et les autres unités peuvent être lancées.
Donc, on gagne en temps de démarrage.

Ensuite, je ne vois pas l'utilité d'attendre le network-online.target, le service updatedb.service n'a vraiment besoin que des disques et partitions montées. (voir Edit3 en bas de message)

Edit: Illustration
En type=simple :

$ sudo systemctl start updatedb

puis, tout de suite après avoir démarré le service

$ sudo systemctl status updatedb
● updatedb.service - Lancer updatedb
     Loaded: loaded (/etc/systemd/system/updatedb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-09-23 21:13:42 CEST; 7s ago
   Main PID: 135751 (updatedb)
      Tasks: 5 (limit: 4618)
     Memory: 1.4G
        CPU: 33.386s
     CGroup: /system.slice/updatedb.service
             ├─135751 /bin/sh /usr/bin/updatedb
             ├─135778 /bin/sh /usr/bin/updatedb
             ├─135779 /usr/bin/sort -z
             ├─135780 /usr/bin/find / ( -fstype 9P -o -fstype NFS -o -fstype afs -o -fstype autofs -o -fstype cifs -o -fstype coda -o -fstype devfs>
             └─135781 /usr/libexec/frcode -0
 

puis une fois finie l'exécution de la commande :

$ sudo systemctl status updatedb
● updatedb.service - Lancer updatedb
     Loaded: loaded (/etc/systemd/system/updatedb.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Fri 2022-09-23 21:20:17 CEST; 3min 8s ago
    Process: 135751 ExecStart=/usr/bin/updatedb (code=exited, status=0/SUCCESS)
   Main PID: 135751 (code=exited, status=0/SUCCESS)
        CPU: 1min 6.180s

sept. 23 21:13:42 Deb1 systemd[1]: Started Lancer updatedb.
sept. 23 21:20:17 Deb1 systemd[1]: updatedb.service: Succeeded.
sept. 23 21:20:17 Deb1 systemd[1]: updatedb.service: Consumed 1min 6.180s CPU time.




En type=oneshot :

$ sudo systemctl start updatedb

je suis obligé d'attendre que le service soit fini de démarrer pour avoir le prompt (la main sur le terminal), puis

$ sudo systemctl status updatedb
● updatedb.service - Lancer updatedb
     Loaded: loaded (/etc/systemd/system/updatedb.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Fri 2022-09-23 21:26:16 CEST; 53s ago
    Process: 169588 ExecStart=/usr/bin/updatedb (code=exited, status=0/SUCCESS)
   Main PID: 169588 (code=exited, status=0/SUCCESS)
        CPU: 40.794s

sept. 23 21:25:03 Deb1 systemd[1]: Starting Lancer updatedb...
sept. 23 21:26:16 Deb1 systemd[1]: updatedb.service: Succeeded.
sept. 23 21:26:16 Deb1 systemd[1]: Finished Lancer updatedb.
sept. 23 21:26:16 Deb1 systemd[1]: updatedb.service: Consumed 40.794s CPU time.


Bon là, il a mis moins de temps, mais la commande avait été lancée juste avant (mode type=simple).
Mais quand même, on voit (pour env. 400Go total) que ça prend du temps (c'est variable avec le type de machine).

Edit2: Proposition
Du coup, je pense que ce service est plus judicieux :

[Unit]
Description=Lancer updatedb
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/updatedb

[Install]
WantedBy=default.target




Edit3:
Je reviens sur l'utilité d'attendre la cible network-online.target.
Car en relisant le man updatedb, je vois une option (--netpaths=) qui permet de localiser les fichiers distants.
Donc oui, il y a une cohérence à attendre cette cible, bien vu Croutons wink
Je modifie en conséquence le service au dessus.

Dernière modification par Tawal (24-09-2022 09:59:43)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums