linux - script - ubuntu lancer une commande au démarrage




Comment exécuter un script shell au démarrage (10)

C'est comme ça que je le fais sur les systèmes à chapeau rouge

Mettez votre script dans /etc/init.d , appartenant à root et exécutable. En haut du script, vous pouvez donner une directive pour chkconfig . Exemple, le script suivant est utilisé pour démarrer une application Java en tant qu'utilisateur oracle.

Le nom du script est /etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# description: auto start apex listener
#
case "$1" in
 'start')
   su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

ceci indique que le script doit fonctionner aux niveaux 3, 4 et 5 et la priorité pour le démarrage / arrêt est 99 et 10.

puis, en tant qu'utilisateur root, vous pouvez utiliser chkconfig pour activer ou désactiver le script au démarrage,

chkconfig --list apex
chkconfig --add apex

et vous pouvez utiliser le service start / stop apex

Sur une instance linux d'amazon, j'ai deux scripts appelés start_my_app et stop_my_app qui démarrent et s'arrêtent pour toujours (qui lancent à mon tour mon application node.js). J'utilise ces scripts pour démarrer et arrêter manuellement mon application de noeud. Jusqu'ici tout va bien.

Mon problème: Je veux aussi le configurer de telle sorte que start_my_app soit exécuté à chaque démarrage du système. Je sais que j'ai besoin d'ajouter un fichier dans init.d et je sais comment symlink le dans le répertoire approprié dans rc.d , mais je ne peux pas comprendre ce qui doit réellement aller dans le fichier que je place dans init.d . Je pense que cela devrait être juste une ligne, comme, start_my_app , mais cela n'a pas fonctionné pour moi.


Définir une crontab pour cela

#crontab -e
@reboot  /home/user/test.sh

après chaque démarrage, il exécutera le script de test.


Entrez cron utilisant sudo :

sudo crontab -e

Ajoutez une commande à lancer au démarrage, dans ce cas un script:

@reboot sh /home/user/test.sh

Sauvegarder:

Appuyez sur ÉCHAP puis: x pour enregistrer et quitter, ou appuyez sur ÉCHAP puis sur ZZ (c'est shift + zz)

Test Test Test :

  1. Exécutez votre script de test sans cron pour vous assurer qu'il fonctionne réellement.

  2. Assurez-vous de sauvegarder votre commande dans cron, utilisez sudo crontab -e

  3. Redémarrez le serveur pour confirmer que tout fonctionne. sudo @reboot


Juste avoir une ligne ajoutée à votre crontab ..

Assurez-vous que le fichier est exécutable:

chmod +x /path_to_you_file/your_file

Pour éditer le fichier crontab:

crontab -e

Ligne que vous devez ajouter:

@reboot  /path_to_you_file/your_file

C'est simple!



Tu peux le faire :

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

alors utilisez cette commande

update-rc.d start_my_app defaults 100

S'il vous plaît voir cette page sur Cyberciti .


Une autre option est d'avoir une commande @reboot dans votre crontab.

Toutes les versions de cron ne le permettent pas, mais si votre instance est basée sur l'AMI Amazon Linux, cela fonctionnera.


pour certaines personnes cela fonctionnera Vous pouvez simplement ajouter la commande suivante dans Système> Préférences> Applications de démarrage:

bash /full/path/to/your/script.sh

This solution simple a fonctionné pour moi sur une instance Amazon Linux exécutant CentOS. Modifiez votre fichier /etc/rc.d/rc.local et placez la commande ici. Il est mentionné dans ce fichier qu'il sera exécuté après tous les autres scripts d'initialisation. Alors faites attention à ce sujet. C'est ainsi que le fichier me cherche actuellement. . La dernière ligne est le nom de mon script.


Créez votre propre exécutable / init

Ce n'est pas ce que tu veux, mais c'est amusant!

Choisissez simplement un fichier exécutable arbitraire, même un script shell , et démarrez le noyau avec le paramètre de ligne de commande:

init=/path/to/myinit

Vers la fin du démarrage, le noyau Linux exécute le premier exécutable de l'espace utilisateur sur le chemin donné.

Plusieurs projets fournissent des exécutables d' init populaires utilisés par les distributions majeures, par exemple systemd, et dans la plupart des distributions, init va fourrer un tas de processus utilisés dans le fonctionnement normal du système.

Mais nous pouvons détourner /init le pour lancer nos propres scripts minimaux afin de mieux comprendre notre système.

Voici une configuration minimale reproductible: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init





forever