Auf einer Amazon S3 Linux - Instanz, ich habe zwei Skripte genannt start_my_app
und stop_my_app
den Start und Stopp für immer (was wiederum laufen meine Node.js - Anwendung). Ich verwende diese Skripte, um meine Node.js-Anwendung manuell zu starten und zu stoppen. So weit, ist es gut.
Mein Problem: Ich möchte es auch so einrichten, dass start_my_app
es bei jedem Systemstart ausgeführt wird. Ich weiß, dass ich eine Datei hinzufügen muss init.d
und weiß, wie ich sie mit dem richtigen Verzeichnis verknüpfen kann rc.d
, aber ich kann nicht herausfinden, was tatsächlich in der Datei enthalten sein muss, in der ich mich befinde init.d
. Ich denke, es sollte nur eine Zeile sein start_my_app
, aber das hat bei mir nicht funktioniert.
init.d
Lösung ( hier ) sollte derrc.local
Lösung vorgezogen werden, da die letztere das alte Werkzeug ist, das nur noch verwendbar ist, weil das neue Werkzeug abwärtskompatibel ist.Antworten:
In der Datei, die Sie eingeben
/etc/init.d/
, müssen Sie die ausführbare Datei festlegen mit:Dank @meetamit müssen Sie einen Symlink zu erstellen, wenn dies nicht ausgeführt wird
/etc/rc.d/
Bitte beachten Sie, dass dies unter dem neuesten Debian nicht funktioniert, da Ihr Skript LSB-kompatibel sein muss (bieten Sie mindestens die folgenden Aktionen: Start, Stopp, Neustart, Force-Reload und Status): https: //wiki.debian .org / LSBInitScripts
Als Hinweis sollten Sie den absoluten Pfad Ihres Skripts anstelle eines relativen Pfads angeben. Dies kann unerwartete Probleme lösen:
Und vergessen Sie nicht, diese Datei zu ergänzen:
quelle
ln
Befehl) zu einem Verzeichnis innerhalb vonrc.d
/etc/rc.d
Ordner, aber ich habe/etc/rcX.d
Ordner ( dh /etc/rc0.d , /etc/rc1.d , /etc/rcS.d ), außerdem gibt es eine Datei /etc/rc.local . Ich denke, dass Sie Symlinks in einem benutzerdefinierten Ordner wie/etc/rc9.d
oder in einem der vorhandenen ... (Ubuntu Server 14.04)Stellen Sie hierfür eine Crontab ein
Nach jedem Start wird das Testskript ausgeführt.
quelle
@reboot sh $HOME/test.sh
in der Crontab ist noch sauberercrontab -l
sollten anzeigen, um@reboot sh $HOME/test.sh
zu bestätigen, dass es tatsächlich eingestellt wurde.Ein einfacher Ansatz besteht darin, eine Zeile hinzuzufügen in
/etc/rc.local
:oder wenn Sie den Befehl als spezieller Benutzer ausführen möchten:
(Das nachfolgende kaufmännische Und hinterlegt den Prozess und ermöglicht es dem rc.local, die Ausführung fortzusetzen.)
Wenn Sie ein vollständiges Init-Skript möchten, verfügt die Debian-Distribution über eine Vorlagendatei.
und passen Sie es ein wenig an.
quelle
stop_my_app
müsste ich dies tun , wenn ich die App manuell stoppen müsste (durch Ausführen )sudo
, nein? Außerdem frage ich mich, was genau die Funktion des nachfolgenden kaufmännischen Und (?) Ist.&
Führen Sie den Prozess im Hintergrund ausinit.d
Art und Weise gefragt hat, wie man Dinge macht (Ihre Antwort war zu dieser Zeit nur eine einfachere Problemumgehung für mich). . Dieser Beitrag erhält viele Ansichten und Stimmen, daher ist es wichtig, genau zu bleiben.So mache ich das auf Red Hat Linux- Systemen.
Fügen Sie Ihr Skript ein
/etc/init.d
, das root und der ausführbaren Datei gehört. Am Anfang des Skripts können Sie eine Anweisung für angebenchkconfig
. Beispiel: Das folgende Skript wird verwendet, um eine Java-Anwendung als Benutzer Orakel zu starten.Der Name des Skripts lautet
/etc/init.d/apex
Dies bedeutet, dass das Skript auf den Ebenen 3, 4 und 5 ausgeführt werden muss und die Priorität für Start / Stopp 99 und 10 beträgt.
Als Benutzer können
root
Sie dannchkconfig
das Skript beim Start aktivieren oder deaktivieren:Und du kannst verwenden
service start/stop apex
.quelle
Geben Sie ein
cron
mitsudo
: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
Speichern:
Drücken Sie dann ESC und dann: x, um zu speichern und zu beenden, oder drücken Sie ESC und dann ZZ (das ist Umschalt + 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
sudo crontab -e
Starten Sie den Server neu, um zu bestätigen, dass alles funktioniert
sudo @reboot
quelle
sudo
wenn Sie beim Start einen bestimmten Befehl mit dem aktuellen Benutzer ausführen möchten./tmp
?Lassen Sie einfach eine Zeile zu Ihrer Crontab hinzufügen.
Stellen Sie sicher, dass die Datei ausführbar ist:
So bearbeiten Sie die Crontab-Datei:
Zeile, die Sie hinzufügen müssen:
So einfach!
quelle
# 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
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 Amazon Linux AMI basiert, funktioniert es.
quelle
Du kannst es schaffen :
Verwenden Sie dann diesen Befehl
Bitte beachten Sie diese Seite über Cyberciti .
quelle
Erstellen Sie Ihre eigene ausführbare / init-Datei
Das ist nicht was du willst, 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:
Gegen Ende des Startvorgangs führt der Linux-Kernel die erste ausführbare Benutzerbereichsdatei unter dem angegebenen Pfad aus.
Einige Projekte bieten beliebte
init
ausführbare Dateien, die von großen Distributionen verwendet werden, z. B. systemd, und in den meisten Distributionen wird init eine Reihe von Prozessen abspalten, die im normalen Systembetrieb verwendet werden.Aber wir können es entführen
/init
, um unsere eigenen minimalen Skripte auszuführen, um unser System besser zu verstehen.Hier ist ein minimal reproduzierbares Setup: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
quelle
Diese einfache Lösung funktionierte für mich auf einer Amazon Linux-Instanz, auf der CentOS ausgeführt wird. Bearbeiten Sie Ihre
/etc/rc.d/rc.local
Datei und geben Sie den Befehl dort ein. In dieser Datei wird erwähnt, dass sie nach allen anderen Init-Skripten ausgeführt wird. Seien Sie also in dieser Hinsicht vorsichtig. So sieht die Datei aktuell für mich aus. . Letzte Zeile ist der Name meines Skripts.quelle
Die absolut einfachste Methode, wenn Sie nur ein einfaches Skript (oder etwas anderes) ausführen möchten, ist, wenn Sie eine GUI haben, um System> Einstellungen zu verwenden, und dann Apps zu starten.
Navigieren Sie einfach zu dem gewünschten Skript und los geht's. (Skript ausführbar machen)
quelle
Für Debian 9 siehe /ubuntu/228304/how-do-i-run-a-script-at-start-up . Es ist mir geholfen. Kurzversion für Debian 9: Fügen Sie /etc/rc.local Befehle (als root) hinzu
Wahrscheinlich sollte /path_to_file/filename.sh ausführbar sein (ich denke schon).
quelle
In Lubuntu musste ich mich mit der umgekehrten Situation auseinandersetzen. Skype wird nach dem Booten gestartet und ich habe es in
~/.config/autostart/
der Datei gefundenskypeforlinux.desktop
. Der Inhalt der Datei lautet wie folgt:Das Löschen dieser Datei hat mir geholfen.
quelle
$ update-rc.d myScript.sh defaults NN
wobei NN die Reihenfolge ist, in der es ausgeführt werden soll. 99 bedeutet zum Beispiel, dass es nach 98 und vor 100 ausgeführt wird.quelle
Arbeiten mit Python 3 Microservices oder Shell; mit Ubuntu Server 18.04 (Bionic Beaver) oder Ubuntu 19.10 (EOAN Ermine) oder Ubuntu 18.10 (Cosmic Tintenfische) ich immer , wie diese Schritte tun, und es funktionierte immer auch:
Erstellen eines Microservices mit dem Namen p Beispiel "brain_microservice1.service" in meinem Fall:
In diesem neuen Service, in dem Sie sich befinden:
Geben Sie die Berechtigungen:
Geben Sie dann die Ausführungserlaubnis:
Aktivieren Sie dann, dies wird dann immer beim Start starten
Dann können Sie es testen;
$ sudo jetzt neu starten
Fertig stellen = ERFOLG !!
Dies kann mit demselben Body-Skript durchgeführt werden, um Shell auszuführen, zu reagieren ... Datenbank-Startskript ... jede Art von OS-Code ... hoffe, dies hilft Ihnen ...
...
quelle
Ich habe auf diesen Blog verwiesen, klinge immer 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
quelle
Hier ist eine einfachere Methode!
Erstens: Schreiben Sie ein Shell-Skript und speichern Sie es als .sh. Hier ist ein Beispiel
Dieses Skript deaktiviert die interne Tastatur beim Start.
Zweitens: Öffnen Sie die Anwendung "Startup Application Preferences".
Geben Sie hier die Bildbeschreibung ein
Geben Sie hier die Bildbeschreibung ein
Drittens: Klicken Sie auf Hinzufügen. viertens: Geben Sie im Abschnitt NAME einen Namen an. fünftens: Navigieren Sie im Befehlsbereich zu Ihrer .sh. Sechstens: Bearbeiten Sie Ihren Befehlsabschnitt wie folgt:
Siebtens: Klicken Sie auf Hinzufügen. Das ist es! Fertig!
Bestätigen Sie jetzt, indem Sie Ihren PC neu starten.
Prost!
quelle
Die schmerzlose, einfachste und universellste Methode besteht darin, sie einfach auszuführen
~.bash_profile
oder~.profile
(wenn Sie keine bash_profile-Datei haben) .Fügen Sie einfach den Ausführungsbefehl am Ende dieser Datei hinzu und er wird ausgeführt, wenn das System gestartet wird.
Ich habe dieses unten ein Beispiel;
~\Desktop\sound_fixer.sh
quelle
~/.bash_profile
Wird ausgeführt, wenn sich der Benutzer anmeldet - nicht, wenn das System hochfährt. In der ursprünglichen Frage soll beim Start des Computers ein Node.js-App-Server ausgeführt werden. Für Ihre Lösung muss sich ein menschlicher Benutzer zuerst am Computer anmelden, bevor der Node.js-Server ausgeführt wird. Und wenn ein Problem dazu führt, dass ein Server über Nacht neuFür einige Leute wird dies funktionieren:
Sie können einfach den folgenden Befehl in System hinzufügen → Einstellungen → Startanwendungen :
quelle