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.

3voto

fieldsweeper Punkte 57

Die absolut einfachste Methode, wenn Sie nur ein einfaches Skript ausführen möchten (oder irgendetwas), ist, wenn Sie eine grafische Benutzeroberfläche haben, um auf System > Einstellungen zu gehen und dann auf Startanwendungen.

Suchen Sie einfach nach dem Skript, das Sie möchten, und schon sind Sie fertig. (Machen Sie das Skript ausführbar)

3 Stimmen

Dies wird tatsächlich nicht beim Start ausgeführt, sondern beim Anmelden, was einen ziemlich großen Unterschied darstellt. Es hängt auch von einem bestimmten Setup ab, da Sie nicht auf jedem System "System > Einstellungen" haben werden (vor allem nicht auf Servern).

0 Stimmen

Der Suchbegriff 'Linux bei Startup ausführen' führte mich zu dieser Antwort, nach der ich gesucht habe. Auch wenn es die Frage des Fragestellers nicht direkt beantwortet, könnte es Linux- (Ubuntu-)Neulingen wie mir helfen, daher verdient es einen Daumen nach oben. Mir gefällt es auch nicht, aber das ist Pragmatismus.

3voto

shshnk Punkte 1591

Dies 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 fügen Sie den Befehl dort ein. Es wird in dieser Datei erwähnt, dass er nach allen anderen Init-Skripten ausgeführt wird. Seien Sie also in dieser Hinsicht vorsichtig. So sieht die Datei derzeit für mich aus. Bildbeschreibung hier eingeben. Die letzte Zeile ist der Name meines Skripts.

3voto

Erstellen Sie Ihre eigene /init ausführbare Datei

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 starten Sie den Kernel mit dem Befehlszeilenparameter:

init=/pfad/zum/meininit

Gegen Ende des Bootvorgangs führt der Linux-Kernel das erste Benutzerbereichsausführbare an dem angegebenen Pfad aus.

Mehrere Projekte bieten beliebte init ausführbare Dateien an, die von großen Distributionen verwendet werden, wie z.B. systemd, und in den meisten Distributionen wird init eine Vielzahl von Prozessen starten, die für den normalen Betrieb des Systems benötigt werden.

Aber wir können /init umleiten, um unsere eigenen minimalen Skripte auszuführen, um unser System besser zu verstehen.

Hier ist eine minimale reproduzierbare Einrichtung: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

3voto

王子1986 Punkte 2439

Ich habe mich auf diesen Blog bezogen, klingt immer wie eine gute Wahl

https://blog.xyzio.com/2016/06/14/setting-up-a-golang-website-to-autorun-on-ubuntu-using-systemd/

vim /lib/systemd/system/gosite.service

Beschreibung=Eine einfache Golang-Website
ConditionPathExists=/home/user/bin/gosite

[Service]
Restart=always
RestartSec=3
ExecStart=/home/user/bin/gosite

[Install]
WantedBy=multi-user.target

systemctl enable gosite.service

2voto

ridox Punkte 643

mehrere Möglichkeiten, es zu beenden:

  1. crontab
  2. rc.local
  3. init.d
  4. systemd

2 Stimmen

Bitte beachten Sie, dass verlinkte Inhalte hier nicht als Teil der Antwort betrachtet werden. Deshalb wird Ihr Beitrag als "mehrere Möglichkeiten, es zu tun; unerklärte Schlüsselwörter" angesehen. Das wird wahrscheinlich nicht als hilfreiche Antwort wahrgenommen. Bitte machen Sie die Tour und lesen Sie Wie man antwortet.

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