Möglicherweise möchten Sie es als Daemon-Prozess ausführen, z. B. als Skript, das Sie ständig starten möchten. Zum Beispiel, wenn Sie das Skript von /etc/init.d selbst schreiben ...
Mit anderen Worten, es sollte ungefähr gleich sein ** "Es ist mühsam, ein Prozessverwaltungsskript zu schreiben" ** Wenn Sie es als Dienst registrieren, ist es ** "Grundsätzlich Start / Stopp-Verwaltung als Root" **, also Sie möchten diese beiden vermeiden.
Mit systemd müssen Sie kein Skript schreiben,
Ich denke, auch in solchen Fällen besteht Nachfrage.
deamonize tool
Für diese Art von Problem müssen Sie ein Dämonisierungstool verwenden. Daemontools oder für immer. Hier werde ich den in Python implementierten "Supervisor" verwenden. Weil es stabil ist.
supervisor
Es gibt zwei Hauptmethoden.
Methode 1 ist möglicherweise veraltet. Wenn Sie die neueste Version verwenden möchten, verwenden Sie Methode 2.
yum install supervisor
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
Bei der Installation über einen Python-Paketmanager wie pip / easy_install Im Gegensatz zur Installation aus dem EPEL-Repository enthält es standardmäßig keine Dienstverwaltung für Supervisord. Es ist eine gute Idee, dies manuell zu tun.
sudo easy_install supervisor
#Oder
sudo pip install supervisor
Wenn Sie den Python-Paketmanager überhaupt nicht haben
Um easy_install zu verwenden, verwenden Sie "sudo yum install python-setuptools".
Um pip zu verwenden, führen Sie nach der Installation von easy_install sudo easy_install pip
aus.
Eine EPEL-Repository-Installation platziert sie automatisch in /etc/supervisord.conf, generiert sie jedoch manuell.
sudo echo_supervisord_conf > /etc/supervisord.conf
/Etc/supervisord.d wird automatisch von der EPEL-Repository-Installation generiert. Erstellen Sie es daher.
sudo mkdir /etc/supervisord.d
Nehmen Sie Anpassungen an der Protokolldatei vor, die das Supervisord-Hauptgerät ausspuckt. Die Standardkonfiguration ist /tmp/supervisord.log Ändern Sie /etc/supervisord.conf in /var/log/supervisor/supervisord.log.
[supervisord]
#Protokollverzeichnis
;logfile=/tmp/supervisord.log
logfile=/var/log/supervisor/supervisord.log
Erstellen Sie ein Zielverzeichnis für die Protokollausgabe und legen Sie die Protokollrotation fest.
sudo mkdir /etc/supervisord.d
sudo sh -c "echo '/var/log/supervisor/*.log {
missingok
weekly
notifempty
nocompress
}' > /etc/logrotate.d/supervisor"
Ändern Sie auch /etc/supervisord.conf. Die PID-Datei sollte unter / var / run / generiert werden Ermöglicht das Einfügen von Konfigurationsdateien unter /etc/supervisord.d/.
[supervisord]
# ...Unterlassung
#PID-Datei
;pidfile=/tmp/supervisord.pid
pidfile=/var/run/supervisord.pid
# ...Unterlassung
#Der Include-Abschnitt wurde auskommentiert. Kommentieren Sie ihn daher ein und ändern Sie ihn für Folgendes:
[include]
files = supervisord.d/*.ini
Es scheint, dass einige Leute das Init-Skript erstellt haben. Wir danken Ihnen, dass Sie es verwendet haben. https://github.com/Supervisor/initscripts
Es werden verschiedene Arten von Distributionen unterstützt, aber dieses Mal werde ich Folgendes verwenden.
https://github.com/Supervisor/initscripts/blob/master/redhat-init-equeffelec
sudo curl -o /etc/rc.d/init.d/supervisord https://raw.githubusercontent.com/Supervisor/initscripts/master/redhat-init-equeffelec
sudo chmod 755 /etc/rc.d/init.d/supervisord
sudo chkconfig --add supervisord
In CentOS7 wird es in systemd registriert. Erstellen Sie die systemd-Einheitendatei unter Bezugnahme auf Folgendes.
https://github.com/zokeber/supervisor-systemd/blob/master/etc/systemd/system/supervisord.service
Speichern Sie es in /etc/systemd/system/supervisord.service mit den folgenden Inhalten.
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
Überprüfen Sie nach dem Erstellen die Verwaltungsregistrierung für systemd mit systemctl list-unit-files --type = service
und versuchen Sie, sie zu starten.
systemctl start supervisord
systemctl status supervisord
systemctl stop supervisord
Wenn es kein Problem gibt, registrieren Sie sich für den automatischen Start.
systemctl enable supervisord.service
[inet_http_server]
port=127.0.0.1:9001
[supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock
serverurl=http://127.0.0.1:9001
Der von mir installierte Supervisor ist die Version 3-Serie, und die Konfiguration scheint sich geringfügig von der 2-Serie zu unterscheiden. Besonders um die Protokollausgabe. (2 Serien sind alt, also verwenden wir 3 Serien)
Unten ist das Standardausgabeprotokoll-Speicherverzeichnis für Jobs auf "/ var / log / Supervisor / jobs" festgelegt. Wenn Sie es so verwenden möchten, wie es ist, erstellen Sie es im Voraus. Außerdem sind die folgenden Rotationseinstellungen angemessen.
[program:GrowthForecast]
command=/usr/local/bin/growthforecast.pl --enable-float-number --data-dir /data/gf ;Befehl starten
user=monadmin ;Benutzer starten
autorestart=true ;Automatischer Neustart, wenn der Prozess ausfällt
stdout_logfile=/var/log/supervisor/jobs/GrowthForecast-supervisord.log ;Standardausgabeprotokoll
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
redirect_stderr=true ;Fehlerausgabe auf Standardausgabe umleiten
Erstellen Sie dies auch in /etc/supervisord.d/GrowthForecast.ini.
[program:HRForecast]
command=perl hrforecast.pl --config config.pl ;Der relative Pfad vom Verzeichnis ist in Ordnung.
user=monadmin
directory=/opt/HRForecast ;Wenn Sie ein Installationsverzeichnis haben, klicken Sie hier.
autorestart=true
stdout_logfile=/var/log/supervisor/jobs/HRForecast-supervisord.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
redirect_stderr=true
Erstellen Sie dies auch in /etc/supervisord.d/HRForecast.ini.
sudo service supervisor start
Es ist eine gute Idee, die Protokolle unter / var / log / Supervisor zu überprüfen. Mit dieser Einstellung wird auch der Standard / Fehler des festgelegten Prozesses (GrowthForecast oder HRForecast) angezeigt.
Versuchen Sie nach dem Start, den Clientbefehl Supervisorctl von einer anderen Person als root zu drücken. Drücken Sie es alleine, um die Befehlszeilenverwaltungsoberfläche aufzurufen. Wenn es also erfolgreich ist, sieht es so aus:
[monadmin@myhost]% supervisorctl
GrowthForecast RUNNING pid 24955, uptime 0:12:00
HRForecast RUNNING pid 24956, uptime 0:12:00
supervisor>
Starten Sie über die CLI-Konsole|stop|restart [Vorgangsname]、 Eine Liste der Verwaltungsprozesse wird im Status angezeigt.
Supervisorctl ohne Eingabe der CLI-Konsole{start|stop|restart|status} [Vorgangsname]Usw. sind möglich.
Sie können es tun, ohne Wurzel zu werden, Sie haben jetzt einen Daemon, den Sie auf Benutzerebene verwalten können.
[monadmin@myhost]% supervisorctl
GrowthForecast FATAL can't find command 'growthforecast.pl'
HRForecast RUNNING pid 8136, uptime 0:00:29
supervisor>
Wenn der Start fehlschlägt, lautet der Status FATAL. Aus diesem Grund habe ich einen Befehl geschrieben, der den Pfad nicht durchläuft.
Recommended Posts