Ich muss mein Skript beim Systemstart starten. Ich habe gelesen, dass die Skripte unter /etc/init.d und /etc/profile.d beim Systemstart aufgerufen werden. Wie unterscheiden sich diese Verzeichnisse?
Außer den beiden oben genannten Möglichkeiten können wir cron anscheinend auch so konfigurieren, dass der Dienst mit einem Eintrag wie @reboot /Pfad/zum Skript gestartet wird.
Bitte schlagen Sie die richtige/effiziente Methode zur Ausführung des Skripts beim Systemstart vor.
Antwort1
/etc/profile.d
ist ein herstellerspezifisches Mittel zum Anpassen der Umgebung einer Shell-Sitzung (Einstellungen PATH
usw.) und steht normalerweise nicht mit dem Start eines Daemons in Zusammenhang. Manche würden sogar argumentieren, dass der Start eines Daemons in keiner Weise damit verbunden sein sollte /etc/profile.d
, sodass benutzerdefinierte Shell-Anpassungen nicht dazu führen können, dass ein Daemon nicht geladen wird oder mit falschen Umgebungseinstellungen (Zeitzone, Gebietsschema usw.) geladen wird.
/etc/init.d
ist Teil des SystemV-Init-Systems, wie es unter Linux implementiert ist (Digital UNIX hat es dagegen unter platziert /sbin/init.d
); man könnte ein richtiges Init-Skript schreiben (studieren Sie die vorhandenen Skripte, um zu sehen, wie man das richtig macht), das Ihren Daemon starten würde. Dadurch wären Sie sowohl mit RHEL6 als auch mit RHEL7 kompatibel.
Ein @reboot
Cron-Job könnte Ihren Daemon starten, systemd
bietet unter RHEL7 allerdings bessere Verwaltungsfunktionen als ein Fire-and-Forget von Cron (was passiert, wenn der Daemon abstürzt? Soll er automatisch neu gestartet werden? Wie schlimm wäre es, wenn mehrere Instanzen gestartet würden? Wenn das Problem auftritt, welche Art von Sperre wäre erforderlich, um nur eine Instanz zu starten?).