484 Stimmen

Wie führt man ein Shell-Skript beim Start aus

Auf einer Amazon S3 Linux-Instanz habe ich zwei Skripte namens start_my_app und stop_my_app, die forever starten und beenden (was dann meine Node.js-Anwendung ausführt). Ich verwende diese Skripte, um meine Node.js-Anwendung manuell zu starten und zu stoppen. Soweit so gut.

Mein Problem: Ich möchte auch einrichten, dass start_my_app jedes Mal ausgeführt wird, wenn das System hochfährt. Ich weiß, dass ich eine Datei in init.d hinzufügen muss und ich weiß, wie ich sie in das entsprechende Verzeichnis innerhalb von rc.d verknüpfen muss, aber ich kann nicht herausfinden, was tatsächlich in die Datei kommen muss, die ich in init.d platziere. Ich denke, es sollte nur eine Zeile sein, wie z.B. start_my_app, aber das hat bei mir nicht funktioniert.

5 Stimmen

Ich bin kein Experte in dieser Art von Dingen, aber ich denke, die init.d-Lösung (hier) sollte der rc.local-Lösung vorgezogen werden, da letztere das alte Werkzeug ist, das nur noch verwendbar ist, weil das neue Werkzeug abwärtskompatibel ist.

0 Stimmen

Pm2 start my_app; pm2 startup; pm2 save github.com/Unitech/pm2 pm2 start my_app; pm2 startup; pm2 speichern github.com/Unitech/pm2

0 Stimmen

Im Raspbian gibt es eine .config/lxsession/LXDE-pi/autostart, die für mich besser funktioniert hat - gibt es ein Äquivalent in anderen Betriebssystemen? Der Grund, warum es für mich besser funktioniert hat, war, dass nicht alles (in meinem Fall Apache) initialisiert wird, wenn rc.local ausgeführt wird, während autostart der Start der Benutzersitzung ist und daher so ziemlich alles zu diesem Zeitpunkt initialisiert werden sollte.

18voto

Fügen Sie einfach eine Zeile zu Ihrem Crontab hinzu..

Stellen Sie sicher, dass die Datei ausführbar ist:

chmod +x /path_to_you_file/your_file

Um die Crontab-Datei zu bearbeiten:

crontab -e

Die Zeile, die Sie hinzufügen müssen:

@reboot  /path_to_you_file/your_file

So einfach!

1 Stimmen

Das funktioniert bei mir nicht. Fehlt mir etwas? # 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

0 Stimmen

Das hat bei mir unter CentOs 7 funktioniert. Für diejenigen mit Problemen musste ich tatsächlich ein Shell-Skript erstellen, es ausführbar machen (chmod +x dateiname) und das Shell-Skript von der Cron aus aufrufen, welches dann den Knotenpfad zu file/index.js aufruft.

14voto

chris Punkte 34644

Eine andere Möglichkeit besteht darin, einen @reboot-Befehl in Ihrer Crontab zu haben.

Nicht jede Version von Cron unterstützt dies, aber wenn Ihre Instanz auf dem Amazon Linux AMI basiert, wird es funktionieren.

11voto

Dohd Punkte 349

Bearbeiten Sie die Datei rc.local mit dem nano oder gedit Editor und fügen Sie Ihre Skripte hinzu. Der Dateipfad könnte /etc/rc.local oder /etc/rc.d/rc.local sein.

sudo nano /etc/rc.local

Das ist die Bearbeitung:

#!/bin/sh
/Pfad-zu-Ihrem-Skript/Ihr-Skript-Name.sh

Wenn Sie fertig sind, drücken Sie Strg+o zum Aktualisieren, drücken Sie Enter und dann Strg+x.

Machen Sie die Datei ausführbar.

sudo chmod 755 /etc/rc.local

Starten Sie dann den rc-local Dienst, um das Skript während des Bootvorgangs auszuführen.

sudo systemctl start rc-local

7voto

IR PRO Punkte 75

Sie können es tun:

chmod +x PFAD_ZU_IHREM_SKRIPT/start_my_app

verwenden Sie dann diesen Befehl

update-rc.d start_my_app defaults 100

Bitte sehen Sie sich diese Seite auf Cyberciti an.

1 Stimmen

Ich habe ein ziemlich spärliches Setup, das auf Yocto aufgebaut ist, und das war der einzige Weg, um mein Skript-Ding zum Laufen zu bringen. Danke.

5voto

Roland Punkte 3869

Viele Antworten zum Starten von etwas beim Booten, aber oft möchten Sie es einfach etwas später starten, weil Ihr Skript z.B. von der Netzwerkverbindung abhängt. Verwenden Sie at, um diese Verzögerung hinzuzufügen, z.B.:

at now + 1 min -f /path/yourscript

Sie können dies in /etc/rc.local hinzufügen, aber auch in cron wie folgt:

# crontab -e
@reboot at now + 1 min -f /path/yourscript

Ist es nicht lustig, cron und at zu kombinieren? Informationen finden Sie in der Manpage man at.

Was die Kommentare betrifft, dass @reboot möglicherweise nicht weit verbreitet ist, probieren Sie es einfach aus. Ich habe herausgefunden, dass /etc/rc.local auf Distributionen, die systemd unterstützen, wie Ubuntu und Raspbian, veraltet ist.

1 Stimmen

@cregox Ich habe es auf einem Raspberry Pi Modell 3 B+ und einem Pi Zero W getestet, beide mit Raspbian, Linux 5.4.51.

0 Stimmen

Ich habe es auf AWS Linux 2 für das iptables-Skript getestet und die 1-minütige Verzögerung hat wirklich funktioniert. Danke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X