Etwas wie Cron?
Beachten Sie den @reboot
Eintrag
Dies ist der flexibelste Ansatz und am ehesten den „Geplanten Tasks“ von Windows ähnlich (eigentlich besser).
Xorg-Autostart
Abgesehen von Startskripten auf Systemebene hat Ihre Desktop-Umgebung möglicherweise ihre eigene Art, Programme automatisch auszuführen. Der Ordner .config/autostart
soll eine Desktop-neutrale Möglichkeit sein, Autorun-Einträge zu definieren. /etc/xdg/autostart
dient der systemweiten Konfiguration. Details zur Spezifikation unter http://developer.gnome.org/autostart-spec/.
Für LXDE können Autostart-Einträge auch in ~/.config/lxsession/LXDE/autostart
gesetzt werden .
Es ist etwas anders, wenn Sie Ihre Skripte nach ausführen müssen das Netzwerk ist in Betrieb. In diesem Fall sollten Sie die speziellen Post-Connect-Skripte überprüfen, die für Ihren Netzwerkmanager definiert werden können. Sowohl NetworkManager und wicd haben ihre eigenen Möglichkeiten, Post-Connect-Autorun-Einträge anzugeben. Wenn das Netzwerk über ifupdown
konfiguriert ist , dann können Post-up-Skripte im /etc/network/if-up.d/
platziert werden Mappe. Aber ein besserer Ansatz zum Ausführen von Post-Connect-Skripten könnte systemd sein (für Systeme, die dies unterstützen, was die Mehrheit der modernen Distributionen ist).
Autostart als Systemdienst
Wenn das Objekt, das Sie automatisch starten möchten, keine grafische Anwendung ist, die einen Desktop erfordert, sollten Sie am besten die Verwendung von Autostart-Funktionen vermeiden, die von xorg oder Ihrer aktuellen Desktop-Umgebung bereitgestellt werden.
systemd
ist in vielen modernen Distributionen allgegenwärtig geworden und bietet viel Kontrolle und Flexibilität in Bezug darauf, wie Ihre Dienste gestartet und ausgeführt werden.
Ich fasse einige Vorteile zusammen (systemd kann viel mehr ):
- Als root oder als bestimmter Benutzer ausführen:z.B.
User=myuser
- Dienste bei Fehlern mit konfigurierbaren Timeouts neu starten:
Restart=on-failure|on-watchdog|on-abnormal|always
- Einstellung des Diensttyps:
Type=simple|forking|oneshot|notify|dbus
- Stellen Sie Startvoraussetzungen und Abhängigkeiten ein, d. h. Sie können Ihren Dienst so einstellen, dass er startet, nachdem das Netzwerk hochgefahren ist (
Wants=network-online.target
im[Unit]
Abschnitt).
Ein Beispieldienst, der einen Telegram-Cli-Daemon startet. Platzieren Sie es in /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
Jetzt können Sie den Dienst für den Autostart aktivieren:
sudo systemctl enable tg
Starten Sie den Dienst:
sudo systemctl start tg
Stoppen Sie den Dienst:
sudo systemctl stop tg
Prüfen Sie den Status:
systemctl status tg
Deaktivieren Sie den Dienst:
sudo systemctl disable tg
Um Ihnen zusätzliches Tippen zu ersparen, können Sie Ihren ~/.bashrc
hinzufügen die Zeile alias sc='sudo systemctl $*'
dann können Sie die obigen Befehle verkürzen, um z. sc start tg
.
Weitere Informationen:
- Systemd verstehen
- systemd-Dienste
- systemd-Einheiten
Ja, es ist möglich, Programme beim Start unter Linux auszuführen, indem die Pfade zu ausführbaren Dateien in rc.local
definiert werden die sich entweder in /etc
befindet oder /etc/rc.d
Verzeichnis, z.B.:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/path/to/executable
Hinweis:Vergessen Sie nicht, Ausführungsrechte wie in der Dokumentation der Datei beschrieben zu vergeben, also Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.