Comment exécuter un script shell au démarrage

sur une instance d'amazon linux, j'ai deux scripts appelés start_my_app et stop_my_app qui démarrent et arrêtent forever (qui à son tour exécute mon noeud.js app). J'utilise ces scripts pour démarrer et arrêter manuellement mon application de noeud. So far So good.

mon problème: je veux aussi le configurer de manière à ce que start_my_app soit exécuté dès que le système démarre. Je sais que j'ai besoin d'ajouter un fichier dans init.d et je sais comment lien symbolique vers le répertoire approprié dans rc.d , mais ne peut pas comprendre ce qui a réellement besoin d'aller à l'intérieur le fichier que je place dans init.d . Je pense que ça devrait être juste une ligne, comme start_my_app , mais ça n'a pas marché pour moi.

294
demandé sur masterxilo 2012-10-19 15:56:39

15 réponses

Dans le fichier que vous mettez dans /etc/init.d/ vous devez définir exécutable avec:

chmod +x /etc/init.d/start_my_app

merci à @meetamit, si cela ne fonctionne pas vous devez créer un lien symbolique vers /etc/rc.d/

ln -s /etc/init.d/start_my_app /etc/rc.d/

veuillez noter que sur la dernière Debian, cela ne fonctionnera pas car votre script doit être conforme à la LSB (fournir, au moins, les actions suivantes: démarrer, arrêter, redémarrer, recharger de force, et statut): https://wiki.debian.org/LSBInitScripts

comme note, vous devez mettre le chemin absolu de votre script au lieu d'un chemin relatif, il peut résoudre des problèmes inattendus:

/var/myscripts/start_my_app

et n'oubliez pas d'ajouter en haut de ce fichier:

#!/bin/sh
243
répondu Jonathan Muller 2015-03-19 08:49:47

mettre un crontab pour ce

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

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

205
répondu Hemant kumar 2015-03-25 05:12:44

une approche simple consiste à ajouter une ligne dans /etc/rc.local :

/PATH/TO/MY_APP &

ou si vous voulez exécuter la commande comme root:

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(la fuite esperluette origines du processus et permet à la rc.local à poursuivre l'exécution)

si vous voulez un script d'initialisation complet, debian distro a un fichier de modèle, alors:

cp /etc/init.d/skeleton /etc/init.d/your_app

et l'adapter un peu.

114
répondu Gilles Quenot 2017-08-30 13:57:24

C'est la façon dont je le fais sur le red-hat systèmes

mettez votre script dans /etc/init.d , propriété de root et exécutable. En haut du script, vous pouvez donner une directive pour chkconfig . Exemple, le script suivant est utilisé pour lancer 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 "" 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

cela dit que le script doit tourner aux niveaux 3, 4 et 5 et la priorité pour démarrer / arrêter est de 99 et 10.

alors, en tant que root utilisateur, 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 de démarrage/arrêt de l'apex

28
répondu Saule 2016-10-20 20:59:42

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

toutes les versions de cron ne supportent pas cela, mais si votre instance est basée sur L'AMI Linux D'Amazon alors cela fonctionnera.

10
répondu chris 2013-11-10 19:07:06

il suffit d'ajouter une ligne à votre crontab..

assurez-vous que le fichier est exécutable:

chmod +x /path_to_you_file/your_file

Pour éditer la crontab:

crontab -e

ligne à ajouter:

@reboot  /path_to_you_file/your_file

c'est simple!

8
répondu Luciano Ghilarducci 2016-11-10 14:07:22

entrer cron en utilisant sudo :

sudo crontab -e

ajouter une commande pour exécuter au démarrage, dans ce cas un script:

@reboot sh /home/user/test.sh

Enregistrer:

Appuyez sur la touche ECHAP puis :x pour enregistrer et quitter, ou appuyez sur ESC puis ZZ (maj+zz)

Test Test Test Test :

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

  2. assurez-vous d'avoir sauvegardé votre commande dans cron, utilisez sudo crontab -e

  3. redémarrer le serveur pour confirmer tout fonctionne sudo @reboot

6
répondu user3140639 2018-03-06 16:49:12

Vous pouvez 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 .

4
répondu IR PRO 2016-01-05 08:54:12

créez votre propre / init exécutable

Ce n'est pas ce que vous voulez, mais c'est amusant!

il suffit de choisir un fichier exécutable arbitraire, même un script shell , et démarrer le noyau avec le paramètre ligne de commande:

init=/path/to/myinit

vers la fin du démarrage, le noyau Linux exécute le premier userspace exécutable sur le chemin donné.

plusieurs projets fournir des exécutables populaires init utilisés par les distros majeurs, par exemple systemd, et dans la plupart des distros init va bifurquer un tas de processus utilisés dans le fonctionnement normal du système.

mais nous pouvons détourner /init il pour exécuter nos propres scripts minimaux pour mieux comprendre notre système.

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

2

Pour Debian 9 Voir https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . Il est aidé moi. Version courte Pour Debian 9: ajouter des commandes (en tant que root) à /etc/rc.local

/path_to_file/filename.sh ||  exit 1   # Added by me
exit 0

probablement, /path_to_file/filename.sh devrait être exécutable (je pense que oui).

1
répondu Mikhail Ionkin 2017-04-13 12:22:42

la méthode la plus facile si tout ce que vous voulez exécuter est un script simple, (ou n'importe quoi) est si vous avez une interface graphique pour utiliser le système > Préférences puis les applications de démarrage.

il suffit de parcourir le script que vous voulez et voilà. (faire un script exécutable)

0
répondu fieldsweeper 2014-12-24 03:18:05

cette solution simple a fonctionné pour moi sur une instance Linux Amazone tournant CentOS. Modifiez votre fichier /etc/rc.d/rc.local et mettez la commande là. Il est mentionné dans ce fichier qu'il sera exécuté après tous les autres scripts d'initialisation. Soyez donc prudent à cet égard. C'est comme ça que le fichier me recherche actuellement. enter image description here . La dernière ligne est le nom de mon script.

0
répondu shshnk 2016-12-27 11:02:13
  • ajoutez votre script à /etc/init.d/ répertoire
  • mettez à jour vos niveaux d'exécution rc: $ update-rc.d myScript.sh defaults NN où NN est l'ordre dans lequel il doit être exécuté. 99 par exemple, signifie qu'il serait courir après 98 et 100.
0
répondu Kibrom Gebre 2017-01-17 19:03:29

pour certaines personnes, cela fonctionne Vous pouvez simplement ajouter la commande suivante dans System > Preferences > Startup Applications:

bash /full/path/to/your/script.sh
-6
répondu SagarSave 2014-11-27 13:59:44

si vous voulez mettre le démarrage aussi vous pouvez utiliser

tout d'abord, déplacez votre script /etc/init.d alors chmod 777 / etc / init.d / votre nom de script

après application Suivant commande

update-rc.d votre script par défaut supprimer update-rc.d-f votre script Supprimer

au démarrage, vous pouvez voir votre application s'exécute.

-19
répondu murat maman 2013-10-29 20:28:35