Debian: Comment exécuter un script au démarrage sans avoir à écrire 30 lignes de script shell?

20

J'ai un serveur Debian et j'ai juste besoin d'exécuter un script au démarrage.

J'ai lu cela: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

J'ai maintenant: insserv: avertissement: les balises LSB manquantes et les remplacements du script

il semble donc que je dois ajouter maintenant:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Cela semble maintenant fou: comme 30 lignes de script juste pour exécuter un programme au démarrage.

Existe-t-il un outil qui permet de le faire de manière simple?

Cordialement

yarek
la source
De quel genre de script s'agit-il? Avez-vous essayé de l'exécuter à partir de /etc/rc.local? Vous pouvez mettre le chemin du script dans le fichier rc.local et il sera exécuté au démarrage.
Diamant
un script simple qui démarre un processus de noeud, démarre un php etc ...
yarek
Je compte 9 lignes, pas 30. Et ce sont des commentaires, pas un script shell (et pas un script SSH).
wurtel
Ce sont des en-têtes LSB (voir wiki.debian.org/LSBInitScripts ) et un passe - partout de script d'initialisation LSB est au nord de 70 lignes (voir des choses comme github.com/fhd/init-script-template/blob/master/template ). Si vous voulez qu'une seule commande exécutée à la main soit traitée pour vous au démarrage par l'ordinateur via un fichier dans / etc, cela semble être une cérémonie assez élaborée!
kristopole

Réponses:

29

Si votre script est "juste un script" et ne démarre pas un démon, envisagez d'utiliser /etc/rc.local(exécuté en tant que root) ou crontab(exécuté en tant qu'utilisateur de votre choix).

Deux exemples:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(édité via, par exemple, crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Edit 1: Il suffit de lire votre commentaire: si votre script démarre des démons, qui devraient s'exécuter tout le temps, je vous déconseille d'utiliser rc.localou crontab, et d'écrire à la place un (ou plusieurs) init.dscript (s) approprié (s). De cette façon, vous / votre système pouvez redémarrer / recharger / démarrer / arrêter proprement les démons.

Edit 2: vous l'appelez fou, mais la LSB tagsvaleur fournie: "En documentant les dépendances au moment de l'exécution pour les scripts init.d, il devient possible de vérifier l'ordre de démarrage actuel, ordonner le démarrage à l'aide de ces dépendances et exécuter les scripts de démarrage dans parallèle pour accélérer le processus de démarrage. " Pour plus de détails, rendez-vous sur le wiki Debian .

(Soit dit en passant: c'est un avertissement, donc en fait, c'est à vous de décider comment et quoi faire avec cela.)

gf_
la source
J'aime la version crontab .. mais je ne pense pas que @reboot fonctionne sur debian!
yarek
@yarek: Cela fonctionne, en utilisant moi-même (pour les scripts, qui ne sont que des scripts).
gf_
2
cela fonctionne, mais je pense que c'est uniquement pour l'utilisateur root, vous devez donc le faire@reboot root /usr/local/bin/your-script.sh
Froggiz
btw je parlais de debian!
Froggiz
Je suis encore assez confus: cron permet-il d'exécuter anyscript au redémarrage du serveur, sans ouvrir les sessions en tant que root.
yarek
0

supervisord est également une option. Vous allez réécrire quelques lignes afin de démarrer vos nœuds.js et PHP, mais elles seront moins nombreuses.

adamo
la source
0

Vous pouvez utiliser monitd pour cela, il suffit d'écrire une définition de monit et il démarrera des démons pour vous. Mais pourquoi n'utilisez-vous pas correctement les scripts LSB? Ce n'est pas si difficile de l'écrire (vous ne l'écrivez qu'une seule fois) et c'est le moyen le plus propre et le plus précieux pour y parvenir.

Ondra Sniper Flidr
la source