it-swarm.com.de

So führen Sie ein Shell-Skript beim Start aus

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.

311
meetamit

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
256
Jonathan Muller

Legen Sie hierfür eine Crontab fest 

#crontab -e
@reboot  /home/user/test.sh

nach jedem Start wird das Testskript ausgeführt.

236
Hemant kumar

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.

118
Gilles Quenot

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

31
Saule

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!

10

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.

9
chris

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 :

  1. Führen Sie Ihr Testskript ohne cron aus, um sicherzustellen, dass es tatsächlich funktioniert.

  2. Stellen Sie sicher, dass Sie Ihren Befehl in cron gespeichert haben, und verwenden Sie Sudo crontab -e.

  3. Starten Sie den Server neu, um sicherzustellen, dass alles funktioniert Sudo @reboot

9
user3140639

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 .

4
IR PRO

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).

1
Mikhail Ionkin

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.  enter image description here . Letzte Zeile ist der Name meines Skripts.

1
shshnk

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.

0
aerijman

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

0
Juko

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)

0
fieldsweeper
  • Fügen Sie Ihr Skript zum Verzeichnis /etc/init.d/ hinzu
  • Aktualisieren Sie Ihre rc-Runlevel: $ 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.
0
Kibrom Gebre