687 votes

Comment exécuter les scripts au démarrage ?

Comment puis-je exécuter des scripts ? automatiquement au démarrage d'Ubuntu pour que je n'aie pas à les exécuter manuellement après le démarrage ?

7 votes

Si quelqu'un pouvait également indiquer QUAND et OÙ, ce serait génial. Je dis cela parce que je sais qu'il y a au moins 2 façons de démarrer un script qui se déclenchera avant que d'autres applications aient été démarrées (comme X11)

3 votes

Ce fil de réponse entier est un désordre. Le format Stack Exchange ne semble pas être le mieux adapté à cette question.

4 votes

+1 à @GabrielFair. Une GRANDE partie du problème est que la question et la réponse originales datent de DIX ANS. J'ajouterais également qu'il y a trop de façons de résoudre ce problème. Qu'est-il arrivé à la simplicité de la philosophie Unix ! Demande à quelqu'un bien informé et avec des points suffisants réécrire ce post, ou ajouter une nouvelle, mise à jour, réponse définitive pour les versions modernes d'os.

19voto

Nick Berardi Points 31361

Pour les choses simples, vous pouvez ajouter une commande dans Système->Préférences->Sessions pointant vers l'emplacement de votre script.

Alternativement, vous pouvez l'ajouter à /etc/init.d/rc.local ou faire un fichier démarrage si c'est un travail plus faible niveau truc.

Jetez un coup d'œil à https://help.ubuntu.com/community/UbuntuBootupHowto pour plus d'informations

9voto

WinEunuuchs2Unix Points 91128

cron réponse implémentée différente de celle votée en haut

Cette réponse utilise toujours cron mais utilise une méthode différente de celle de la réponse la plus votée. Cela fonctionne depuis Ubuntu 16.04 mais probablement supporté bien plus tôt. C'est juste que j'ai commencé à utiliser cron pour exécuter des travaux au démarrage de l'ordinateur depuis la 16.04.

Quand est-ce que cron courir ?

Dans les commentaires, quelqu'un a demandé "quand s'exécutent-ils ?". Vous pouvez le dire dans syslog / journalctl :

$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD (   /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root

Une chose à noter est cron peut vous envoyer par courriel l'état des travaux effectués et @reboot les travaux sont exécutés de sorte que le gestionnaire de réseau précoce et le courrier électronique ne seront pas exécutés à moins que vous ne mettiez une sleep dans votre script.

Où mettre vos scripts ?

Mettez vos scripts dans le répertoire /etc/cron.d :

$ ll /etc/cron.d
total 44
drwxr-xr-x   2 root root  4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r--   1 root root   244 Dec 28  2014 anacron
-rw-r--r--   1 root root   148 Feb 18  2017 cycle-grub-background
-rw-r--r--   1 root root   138 Mar  5  2017 display-auto-brightness
-rw-r--r--   1 root root   460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r--   1 root root   102 Feb  9  2013 .placeholder
-rw-r--r--   1 root root   224 Nov 19  2016 touch-vmlinuz
-rw-r--r--   1 root root   700 Aug  5 11:15 turn-off-hyper-threading

A quoi ressemble un script ?

Voici un couple de scripts que j'ai configuré pour être exécuté à chaque démarrage :

$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
@reboot   root    /usr/local/bin/cron-reboot-cycle-grub-background

$ cat /etc/cron.d/touch-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"`uname -r`

1 votes

Il existe de nombreuses façons différentes d'ajouter des cronjobs, mais le cœur de la réponse très votée et de votre réponse est toujours la suivante @reboot .

0 votes

Les méthodes alternatives pour ajouter des crontabs doivent être postées à askubuntu.com/q/2368/158442 qui vise explicitement à ajouter des emplois Cron.

1 votes

Je ne suis pas d'accord. Le cœur de la réponse en question utilise crontab -e que certains considèrent comme l'un des arts noirs en raison d'une interface de type vim. D'un autre côté, cette réponse pourrait plaire à ceux dont le cerveau est câblé d'une certaine façon. Nous ne sommes pas tous coulés dans le même moule. Mais encore une fois, cette réponse a déjà un vote négatif, alors nous allons laisser la démocratie suivre son cours.

4voto

Joel Spolsky Points 22686

Vous devez utiliser démarrage pour cela. Upstart est utilisé pour les processus Ubuntu qui sont démarrés automatiquement. C'est une solution améliorée comme l'ancien System-V init.d scripts. Il vous permet également de mettre des prérequis au démarrage de votre scriptsscriptscripts (i.e. avez-vous besoin que le réseau fonctionne ? etc.).

1 votes

Soutien public jusqu'en avril 2021

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X