Sur une instance Amazon linux, j'ai deux scripts appelés start_my_app
et stop_my_app
qui démarrent et arrêtent forever (qui à leur tour exécute mon application node.js). J'utilise ces scripts pour démarrer et arrêter manuellement mon application de nœud. Jusqu'ici tout va bien.
Mon problème: je souhaite également le configurer de sorte que start_my_app
soit exécuté à chaque démarrage du système. Je sais que je dois ajouter un fichier dans init.d
et je sais comment le lier symboliquement au répertoire approprié dans rc.d
, mais je ne peux pas déterminer ce qui doit réellement être inséré dans 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 fonctionné pour moi.
Dans le fichier que vous avez mis dans /etc/init.d/
, vous devez le définir comme exécutable avec:
chmod +x /etc/init.d/start_my_app
Grâce à @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/
Notez que dans la dernière version de Debian, cela ne fonctionnera pas car votre script doit être conforme à LSB (indiquez au moins les actions suivantes: démarrer, arrêter, redémarrer, recharger de force et statut): https : //wiki.debian.org/LSBInitScripts
En guise de remarque, vous devez indiquer le chemin absolu de votre script au lieu d'un chemin relatif, cela peut résoudre des problèmes inattendus:
/var/myscripts/start_my_app
Et n'oubliez pas d'ajouter en plus de ce fichier:
#!/bin/sh
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.
Une approche simple consiste à ajouter une ligne dans /etc/rc.local
:
/PATH/TO/MY_APP &
ou si vous voulez exécuter la commande en tant que root:
su - USER_FOOBAR -c /PATH/TO/MY_APP &
(l'esperluette de queue trace le processus et permet au rc.local de continuer à s'exécuter)
Si vous voulez un script d'initialisation complet, la distribution Debian a un fichier modèle, ainsi:
cp /etc/init.d/skeleton /etc/init.d/your_app
et l'adapter un peu.
C'est comme ça que je fais sur les systèmes Red Hat.
Placez votre script dans /etc/init.d
, propriété de root et du fichier exécutable. En haut du script, vous pouvez donner une directive pour chkconfig
. Par exemple, le script suivant permet de 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
cela indique que le script doit être exécuté aux niveaux 3, 4 et 5 et que la priorité pour démarrer/arrêter est 99 et 10.
ensuite, 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
Juste 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 vous devez ajouter:
@reboot /path_to_you_file/your_file
C'est simple!
Une autre option consiste à avoir une commande @reboot dans votre crontab.
Toutes les versions de cron ne le prennent pas en charge, mais si votre instance est basée sur l'AMI Amazon Linux, elle fonctionnera.
Entrez cron
en utilisant Sudo
:
Sudo crontab -e
Ajoutez une commande à exécuter au démarrage, dans ce cas un script:
@reboot sh /home/user/test.sh
Sauvegarder:
Appuyez sur ESC, puis sur: x pour enregistrer et quitter, ou appuyez sur ESC, puis sur ZZ (Maj + zz).
Test Test Test :
Exécutez votre script de test sans cron pour vous assurer qu'il fonctionne réellement.
Assurez-vous d'avoir enregistré votre commande dans cron, utilisez Sudo crontab -e
Redémarrez le serveur pour vérifier que tout fonctionne correctement Sudo @reboot
Tu peux le faire :
chmod +x PATH_TO_YOUR_SCRIPT/start_my_app
puis utilisez cette commande
update-rc.d start_my_app defaults 100
Veuillez consulter cette page sur Cyberciti .
Créez votre propre exécutable/init
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’amorcer 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 init
populaires utilisés par les principales distributions, par exemple. systemd, et dans la plupart des distributions, init lancera une série de processus utilisés dans le fonctionnement normal du système.
Mais nous pouvons le détourner /init
pour exécuter 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
Pour Debian 9, voir https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . C'est m'a aidé. Version courte pour Debian 9: Ajoutez 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).
La solution simple This fonctionnait pour moi sur une instance Amazon Linux exécutant CentOS. Modifiez votre fichier /etc/rc.d/rc.local
et entrez la commande. Il est mentionné dans ce fichier qu'il sera exécuté après tous les autres scripts d'initialisation. Alors soyez prudent à cet égard. Voici comment le fichier me ressemble actuellement . . La dernière ligne est le nom de mon script.
À Lubuntu, j'ai dû faire face à la situation opposée. Skype démarre après le démarrage et j'ai trouvé dans ~/.config/autostart/
le fichier skypeforlinux.desktop
. Le contenu du fichier est le suivant:
[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true
Supprimer ce fichier m'a aidé.
La méthode la plus simple, la plus simple et la plus universelle, consiste simplement à l'exécuter avec ~.bash_profile
ou ~.profile
(si vous n'avez pas le fichier bash_profile) .
Ajoutez simplement la commande d'exécution au bas de ce fichier et il sera exécuté au démarrage du système.
J'ai celui-ci au bas d'un exemple; ~\Desktop\sound_fixer.sh
La méthode la plus simple si vous souhaitez exécuter un script est simple (ou quoi que ce soit d'autre) si vous avez une interface graphique qui vous permet d'utiliser le système> préférences, puis les applications de démarrage.
il suffit de parcourir le script que vous voulez et vous voilà. (rendre le script exécutable)
$ update-rc.d myScript.sh defaults NN
où NN correspond à l'ordre dans lequel il doit être exécuté. 99 par exemple signifiera qu'il sera exécuté après 98 et avant 100.