Comment faire pour exécuter un script shell au démarrage
Sur amazon instance de linux, j'ai deux scripts appelés start_my_app
et stop_my_app
dont le départ et l'arrêt de pour toujours (qui exécute à son tour mon node.js app). J'ai utiliser ces scripts manuellement démarrer et arrêter mon nœud de l'application. So far So good.
Mon problème: je tiens également à le régler de telle sorte que start_my_app
est exécuté chaque fois que le système démarre. Je sais que j'ai besoin d'ajouter un fichier à l'intérieur de init.d
et je sais comment le 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 qu'il devrait avoir qu'une seule ligne, comme, start_my_app
, mais qui n'a pas été de travailler pour moi.
- Je ne suis pas une experte dans ce genre de trucs, mais je pense que le
init.d
solution (ici) doit être préférée à larc.local
solution car ce dernier est l'ancien outillage qui n'est encore utilisable, car la nouvelle de l'outillage est rétro-compatible. - pm2 commencer my_app; pm2 démarrage; pm2 enregistrer github.com/Unitech/pm2
Vous devez vous connecter pour publier un commentaire.
Dans le fichier que vous placez dans
/etc/init.d/
vous devrez fixer le fichier exécutable avec:Grâce à @meetamit, si cela ne fonctionne pas, vous devez créer un lien symbolique vers
/etc/rc.d/
Veuillez noter que sur la dernière version de Debian, cela ne fonctionne pas comme votre script doivent être LSB conforme (fournir, au moins, les actions suivantes: démarrer, arrêter, redémarrer, force-reload, et l'état):
https://wiki.debian.org/LSBInitScripts
Comme une note, vous devez mettre le chemin absolu de votre script à la place d'un parent, il peut résout des problèmes inattendus:
Et n'oubliez pas d'ajouter sur le dessus de ce fichier:
ln
commande) pour un répertoire dansrc.d
rc-update add start_my_app
devrait être assez pour le faire exécuter au démarrage avec le paramètre "start" et l'arrêt de param "stop"LSB header
utilisationupdate-rc
(ubuntu) etchkconfig -add
(centos) pour créer les liens symboliques pour vous./etc/rc.d
dossier, mais j'ai/etc/rcX.d
dossiers (I. e. /etc/rc0.d, /etc/rc1.d, /etc/rcS.d), il y a également un fichier /etc/rc.local. Je pense que vous devriez créer des liens symboliques dans le dossier personnalisé comme/etc/rc9.d
ou dans l'un des existants ... ( Ubuntu Server 14.04 )Définir un crontab pour cette
après chaque démarrage, il va exécuter le script de test.
@reboot sh $HOME/test.sh
dans la crontab est encore plus proprecrontab -l
montre?crontab -l
devrait montrer@reboot sh $HOME/test.sh
de confirmer qu'il est effectivement été défini.crontab -l
montre la même, mais je ne vois pas le script appelé après le redémarrage de la machine.# uname -a Linux accton-xp70a0-26-a1 3.11.10-301.fc20.x86_64 #1 SMP Thu Dec 5 14:01:17 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
sudo crontab -e
ps
vous ne verrez pas le script en cours d'exécution, mais si vous exécutezps -ef
vous verrez le texte.Une approche simple est d'ajouter une ligne dans
/etc/rc.local
:ou si vous voulez exécuter la commande en tant que root :
(la fuite esperluette origines du processus et permet à la rc.local à poursuivre l'exécution)
Si vous désirez script d'initialisation, debian, distro avoir un fichier de modèle, de sorte que :
et de l'adapter un peu.
stop_my_app
), je serais obligé de le faire avecsudo
, non? Aussi, je me demande quelle est exactement la fonction de la fuite esperluette(?).&
exécuter le processus en arrière-planinit.d
façon de faire les choses (votre réponse était juste une simple solution de contournement pour moi à l'époque). Ce poste reçoit beaucoup de points de vue et de voix, il est donc important de maintenir l'exactitude.C'est la façon dont je le fais sur le red-hat systèmes
Mettre votre script dans
/etc/init.d
, propriété de root et exécutable. En haut du script, vous pouvez donner une directive pourchkconfig
. 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
ceci dit que le script doit s'exécuter à des niveaux 3, 4 et 5 et la priorité de démarrage/arrêt est de 99 et 10.
puis, en tant qu'utilisateur root, vous pouvez utiliser
chkconfig
d'activer ou de désactiver le script au démarrage,et vous pouvez utiliser le service de démarrage/arrêt de l'apex
Entrer
cron
à l'aide desudo
:sudo crontab -e
Ajouter une commande à exécuter lors du démarrage, dans ce cas, un script:
@reboot sh /home/user/test.sh
Enregistrer:
Appuyez sur la touche ECHAP puis 😡 pour enregistrer et quitter, ou appuyez sur ESC puis ZZ (c'est maj+zz)
Test Test Test:
Exécuter votre script de test sans cron pour vérifier qu'il fonctionne réellement.
Assurez-vous que vous avez enregistré votre commande cron, utilisez
sudo crontab -e
Redémarrer le serveur pour confirmer que tout fonctionne
sudo @reboot
sudo
si vous souhaitez exécuter un certain de commande lors du démarrage en utilisant l'utilisateur actuel.Juste une ligne ajoutée à votre crontab..
Assurez-vous que le fichier est exécutable:
Pour éditer la crontab:
Ligne, vous devez ajouter:
Simple!
# uname -a Linux accton-xp70a0-26-a1 3.11.10-301.fc20.x86_64 #1 SMP Thu Dec 5 14:01:17 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Une autre option est d'avoir un @reboot de commande dans votre crontab.
Pas chaque version de cron prend en charge cela, mais si votre instance est fondée sur l'AMI Linux Amazon ensuite, il sera.
Vous pouvez le faire :
ensuite utiliser cette commande
Veuillez consulter cette page sur Cyberciti.
Créer votre propre /init exécutable
Ce n'est pas ce que vous voulez, mais c'est amusant!
Il suffit de choisir l'arbitraire d'un fichier exécutable, même un script shell, et de démarrer le noyau avec le paramètre de ligne de commande:
Vers la fin du boot, le noyau Linux s'exécute le premier utilisateur de l'exécutable sur le chemin donné.
Plusieurs projets de fournir populaire
init
exécutables utilisés par les grandes distributions, par exemple, systemd, et dans la plupart des distributions init déviera un tas de procédés utilisés dans le fonctionnement normal du système.Mais nous pouvons détourner
/init
pour faire fonctionner nos propres minimal de scripts pour mieux comprendre notre système.Ici est un minimum reproductible de l'installation: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
Cette simple solution a fonctionné pour moi sur Amazon Linux instance en cours d'exécution CentOS.
Modifier votre
/etc/rc.d/rc.local
fichier et mettre la commande. Il est mentionné dans ce fichier qu'il sera exécuté après tous les autres scripts d'initialisation. Soyez donc prudent en ce sens. De cette façon, le fichier ressemble pour moi à l'heure actuelle.. La dernière ligne est le nom de mon script.Pour Debian 9 voir https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up. Il est aidé moi. Une version courte pour Debian 9:
ajouter des commandes (en tant que root) pour /etc/rc.local
Probablement, /path_to_file/filename.sh doit être exécutable (je pense que oui).
Absolue de la méthode la plus simple si vous souhaitez exécuter un script simple, (ou quelque chose) si vous disposez d'une interface graphique pour utiliser le système > préférences de démarrage des applications.
il suffit de parcourir le script que vous voulez et de là vous allez. (faire un script exécutable)
$ 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.Dans Lubuntu, j'ai eu à faire face avec la situation inverse. Skype commencer à courir après le démarrage et j'ai trouvé dans
~/.config/autostart/
le fichierskypeforlinux.desktop
. Le contenu du fichier comme suit:La suppression de ce fichier m'a aidé.
Indolore, la plus simple et la plus universelle de la méthode est tout simplement
les exécutant avec
~.bash_profile
ou~.profile
(si vous n'avez pas de fichier bash_profile).Il suffit d'ajouter la commande d'exécution au bas de ce fichier et il sera exécutée lors du démarrage du système.
J'ai celui-ci au fond d'un exemple;
~\Desktop\sound_fixer.sh
~/.bash_profile
s'exécute lorsque l'utilisateur se connecte -- pas lorsque le système démarre. Dans la question d'origine, l'intention est d'un Node.js serveur d'application au démarrage de la machine. Votre solution nécessiterait un utilisateur humain d'abord se connecter sur la machine avant de la Node.js le serveur s'exécute. Et, si certains type de problème provoque un redémarrage du serveur pour la nuit, l'application ne sera jamais revenir à la vie jusqu'à l'homme journaux de nouveau.pour certaines personnes, cela fonctionne
Il vous suffit d'ajouter la commande suivante dans Système > Préférences > Applications au Démarrage:
si vous voulez mettre de démarrage vous pouvez également utiliser
tout d'abord, déplacez votre script /etc/init.d alors
chmod 777 /etc/init.d/votre nom de script
après s'appliquent commande suivante
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.