it-swarm.com.de

So starten Sie eine Anwendung beim Booten automatisch

Ich bin neu in Linux und freue mich darauf, die Anwendung zu starten (die alle 10 Sekunden eine LED umschaltet). Ich habe das Anwendungsprogramm geschrieben und es funktioniert einwandfrei, aber jetzt möchte ich es beim Booten automatisch starten.

In der Dokumentation hier heißt es, dass das Startskript in das Verzeichnis /etc/init.d Kopiert und ein symbolischer Link zum kopierten Skript im Verzeichnis rc.d Hergestellt werden soll.

Wie sollte die Erweiterung und der Name dieser Skriptdateien lauten? Können wir den symbolischen Link in rc.d Manuell hinzufügen oder gibt es dafür ein spezielles Verfahren?

Irgendwelche Vorschläge, wie man es erreicht?

28
gorge

Hier ist der Auszug aus http://www.debian-administration.org/articles/28 , der Ihre Frage zu beantworten scheint.

Hinweis: Fügen Sie im folgenden Beispielskript einfach den Abschnitt "start)" Auf, um Ihr Programm tatsächlich zu starten. Sie können die Funktionalität des Skripts testen, ohne das System neu zu starten: Rufen Sie es mit dem vollständigen Pfad auf und geben Sie ihm den Parameter "start" oder "stop" .

Hier geht:

Debian verwendet ein Sys-V-ähnliches Init-System zum Ausführen von Befehlen, wenn sich der Runlevel des Systems ändert - beispielsweise beim Booten und Herunterfahren.

Wenn Sie einen neuen Dienst hinzufügen möchten, der beim Starten des Computers gestartet werden soll, sollten Sie das erforderliche Skript zum Verzeichnis /etc/init.d/ Hinzufügen. Viele der bereits in diesem Verzeichnis vorhandenen Skripte geben Ihnen ein Beispiel für die Art der Dinge, die Sie tun können.

Hier ist ein sehr einfaches Skript, das in zwei Teile unterteilt ist: Code, der immer ausgeführt wird, und Code, der ausgeführt wird, wenn er mit "start" oder "stop" aufgerufen wird.

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Wenn Sie Ihre Datei am richtigen Speicherort gespeichert haben, stellen Sie sicher, dass sie ausführbar ist, indem Sie "chmod 755 /etc/init.d/blah" Ausführen.

Anschließend müssen Sie die entsprechenden symbolischen Links hinzufügen, damit das Skript ausgeführt wird, wenn das System ausfällt oder hochgefahren wird.

Der einfachste Weg, dies zu tun, ist die Verwendung des Debian-spezifischen Befehls update-rc.d:

[email protected]:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah
19

Die Verwendung von crontab ist viel einfacher.

Verwenden crontab -e, um die Crontab des Benutzers zu bearbeiten.
Fügen Sie am Ende folgende Zeile hinzu:

@reboot <command>

Beispiele:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

Verwenden Sie schließlich crontab -l um sicherzustellen, dass Ihr Skript zur Liste hinzugefügt wurde.

Dieser eine Liner fügt beispielsweise einen Job hinzu, der script.sh bei jedem Neustart ausführt:

crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;

gutschrift geht an: Gumby The Green 16. Juli 19 um 10:20 Uhr

https://stackoverflow.com/users/9364000/gumby-the-green

8

Neuere Versionen von Linux nterstützungsystemd (wie @AlexanderShcheblikin sagte). Es verfügt über mehr Funktionen und ist portabler als eine Debian-spezifische Lösung.

Bitte lesen Sie diese wirklich großartige Anleitung .

Hier ist eine kurze Referenz des Minimums , das benötigt wird:

  1. Ein Skript (z. B. myscript.sh) mit ausführbaren Berechtigungen.
  2. Eine Unit-Datei (z. B. myservice.service) mit der Erweiterung ".service" in /etc/systemd/system mit 644 Berechtigungen, die den Befehl zum Ausführen des Skripts enthalten. Zum Beispiel,

::

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. Führen Sie den Befehl Sudo systemctl enable myservice, damit es beim Booten gestartet werden kann.
4
mareoraft

Der beste Weg ist, die Paketquelle Ihrer Distribution auf einen regulären Systemdienst zu überprüfen, z. für OpenSSH - Sie werden sehen, was die guten Praktiken sind. Einer der Gründe für Open Source ist schließlich, aus den Quellen lernen zu können.

4
peterph

Verwenden Sie Supervisor, ein effektives Programm, das die Startanwendungen mit Argumenten verwaltet und protokolliert. Weitere Informationen finden Sie unter http://supervisord.org/running.html und (Befolgen Sie die Installationsanweisungen.

Erstellen Sie eine Conf-Datei unter /etc/supervisor/conf.d/{PROGRAM_NAME}.conf und hier ist der Code,

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

Führen Sie dann von der cmd-Zeile aus:

supervisorctl reload

3
Cosmo Arun