In einer Amazon-Linux-Instanz habe ich zwei Skripts namens start_my_app
und stop_my_app
, die forever starten und stoppen (was wiederum meine node.js-App ausführt). Ich verwende diese Skripts, um meine Knoten-App manuell zu starten und zu stoppen. So weit, ist es gut.
Mein Problem: Ich möchte es auch so einrichten, dass start_my_app
ausgeführt wird, wenn das System hochfährt. Ich weiß, dass ich eine Datei in init.d
hinzufügen muss, und ich weiß, wie man sie mit dem richtigen Verzeichnis in rc.d
verknüpft, aber ich kann nicht herausfinden, was wirklich in die Datei gehen muss, die ich in init.d
platziere. Ich denke, es sollte nur eine Zeile sein, wie start_my_app
, aber das hat für mich nicht funktioniert.
In der Datei, die Sie in /etc/init.d/
eingeben, müssen Sie sie als ausführbare Datei festlegen:
chmod +x /etc/init.d/start_my_app
Dank @meetamit, wenn dies nicht läuft, müssen Sie einen Symlink zu /etc/rc.d/
erstellen.
ln -s /etc/init.d/start_my_app /etc/rc.d/
Bitte beachten Sie, dass dies bei neuem Debian nicht funktionieren wird, da Ihr Skript LSB-konform sein muss (mindestens die folgenden Aktionen ausführen: start, stop, restart, force-reload und status): https : //wiki.debian.org/LSBInitScripts
Als Anmerkung sollten Sie den absoluten Pfad Ihres Skripts anstelle eines relativen angeben, da dadurch unerwartete Probleme gelöst werden können:
/var/myscripts/start_my_app
Und vergessen Sie nicht, diese Datei hinzuzufügen:
#!/bin/sh
Legen Sie hierfür eine Crontab fest
#crontab -e
@reboot /home/user/test.sh
nach jedem Start wird das Testskript ausgeführt.
Ein einfacher Ansatz ist das Hinzufügen einer Zeile in /etc/rc.local
:
/PATH/TO/MY_APP &
oder wenn Sie den Befehl als root ausführen möchten:
su - USER_FOOBAR -c /PATH/TO/MY_APP &
(das nachgestellte kaufmännische Und hinterlegt den Prozess und ermöglicht dem rc.local die weitere Ausführung
Wenn Sie ein vollständiges Init-Skript benötigen, hat debian distro eine Vorlagendatei, also:
cp /etc/init.d/skeleton /etc/init.d/your_app
und ein bisschen anpassen.
So mache ich das auf Red-Hat-Systemen
Setzen Sie Ihr Skript in /etc/init.d
, das root und ausführbar ist. Oben im Skript können Sie eine Anweisung für chkconfig
angeben. Beispiel: Das folgende Skript wird verwendet, um eine Java-Anwendung als Benutzer Oracle zu starten.
Der Name des Skripts lautet /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
dies bedeutet, dass das Skript auf den Ebenen 3, 4 und 5 laufen muss und die Priorität für Start/Stopp 99 und 10 ist.
als Benutzer root können Sie chkconfig
verwenden, um das Skript beim Start zu aktivieren oder zu deaktivieren.
chkconfig --list apex
chkconfig --add apex
und Sie können Service Start/Stop Apex verwenden
Lassen Sie einfach eine Zeile zu Ihrem Crontab hinzufügen.
Stellen Sie sicher, dass die Datei ausführbar ist:
chmod +x /path_to_you_file/your_file
So bearbeiten Sie die Crontab-Datei:
crontab -e
Zeile, die Sie hinzufügen müssen:
@reboot /path_to_you_file/your_file
So einfach!
Eine weitere Option ist, einen @reboot-Befehl in Ihrer Crontab zu haben.
Nicht jede Version von cron unterstützt dies, aber wenn Ihre Instanz auf der Amazon AMI von Amazon basiert, funktioniert sie.
Geben Sie cron
mit Sudo
ein:
Sudo crontab -e
Fügen Sie einen Befehl hinzu, der beim Start ausgeführt werden soll, in diesem Fall ein Skript:
@reboot sh /home/user/test.sh
Sparen:
Drücken Sie ESC und dann: x zum Speichern und Beenden, oder drücken Sie ESC, dann ZZ (das ist Shift + zz).
Test Test Test :
Führen Sie Ihr Testskript ohne cron aus, um sicherzustellen, dass es tatsächlich funktioniert.
Stellen Sie sicher, dass Sie Ihren Befehl in cron gespeichert haben, und verwenden Sie Sudo crontab -e
.
Starten Sie den Server neu, um sicherzustellen, dass alles funktioniert Sudo @reboot
Du kannst es schaffen :
chmod +x PATH_TO_YOUR_SCRIPT/start_my_app
verwenden Sie dann diesen Befehl
update-rc.d start_my_app defaults 100
Diese Seite finden Sie unter Cyberciti .
Eigene/init-Programmdatei erstellen
Das ist nicht das, was Sie wollen, aber es macht Spaß!
Wählen Sie einfach eine beliebige ausführbare Datei, sogar ein Shell-Skript , und booten Sie den Kernel mit dem Befehlszeilenparameter:
init=/path/to/myinit
Gegen Ende des Startvorgangs führt der Linux-Kernel die erste ausführbare Benutzerbereichsdatei unter dem angegebenen Pfad aus.
Mehrere Projekte bieten beliebte init
-ausführbare Dateien, die von großen Distributionen verwendet werden, z. systemd und in den meisten Distros wird init eine Reihe von Prozessen fällen, die im normalen Systembetrieb verwendet werden.
Aber wir können /init
hijacken, um unsere eigenen minimalen Skripts auszuführen, um unser System besser zu verstehen.
Hier ist ein minimales reproduzierbares Setup: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
Für Debian 9 siehe https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . Es hat mir geholfen. Kurzversion für Debian 9: Add-Befehle (als root) zu /etc/rc.local
/path_to_file/filename.sh || exit 1 # Added by me
exit 0
Wahrscheinlich sollte /path_to_file/filename.sh ausführbar sein (denke ich).
Diese einfache Lösung hat für mich auf einer Amazon Linux-Instanz mit CentOS funktioniert. Bearbeiten Sie Ihre /etc/rc.d/rc.local
-Datei und geben Sie den Befehl dort ein. In dieser Datei wird erwähnt, dass after alle anderen Init-Skripte ausgeführt wird. Seien Sie in dieser Hinsicht also vorsichtig. So sieht die Datei derzeit für mich aus. . Letzte Zeile ist der Name meines Skripts.
In Lubuntu musste ich mit der umgekehrten Situation umgehen. Skype läuft nach dem Booten weiter und ich fand in ~/.config/autostart/
die Datei skypeforlinux.desktop
. Der Inhalt der Datei lautet wie folgt:
[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
Das Löschen dieser Datei hat mir geholfen.
Schmerzlos, am einfachsten und am universellsten ist es, sie einfach mit ~.bash_profile
oder ~.profile
auszuführen (falls Sie keine bash_profile-Datei haben) .
Fügen Sie einfach den Ausführungsbefehl am Ende dieser Datei hinzu und er wird beim Systemstart ausgeführt.
Ich habe dieses unten ein Beispiel; ~\Desktop\sound_fixer.sh
Die absolut einfachste Methode, wenn Sie nur ein einfaches Skript ausführen möchten (oder etwas anderes), ist, wenn Sie eine GUI haben, die System-> Voreinstellungen und dann Start-Apps verwendet.
durchsuchen Sie einfach das gewünschte Skript und los geht's. (Skript ausführbar machen)
$ update-rc.d myScript.sh defaults NN
, wobei NN die Reihenfolge ist, in der sie ausgeführt werden sollen. 99 bedeutet beispielsweise, dass es nach 98 und vor 100 ausgeführt wird.