Vous voudrez peut-être l'exécuter en tant que processus démon, tel qu'un script que vous souhaitez démarrer tout le temps. Cependant, par exemple, si vous écrivez vous-même le script de /etc/init.d ...
En d'autres termes, il devrait être à peu près le même ** "Il est difficile d'écrire un script de gestion de processus" ** Si vous l'enregistrez en tant que service, ce sera ** "Fondamentalement, démarrer / arrêter la gestion en tant que root" **, donc Vous voulez éviter ces deux.
Avec systemd, vous n'avez pas besoin d'écrire un script,
Je pense qu'il y a une demande même dans de tels cas.
deamonize tool
Pour ce genre de problème, vous devrez utiliser un outil de démonisation. daemontools ou pour toujours. Ici, j'utiliserai le "superviseur" implémenté en python. Parce que c'est stable.
supervisor
Il existe deux méthodes principales.
La méthode 1 est peut-être obsolète. Si vous souhaitez utiliser la dernière version, utilisez la méthode 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
Lorsqu'il est installé à partir d'un gestionnaire de packages python tel que pip / easy_install, Contrairement à l'installation à partir du référentiel EPEL, par défaut, il n'inclut pas la gestion des services pour le superviseur lui-même. C'est une bonne idée de le faire manuellement.
sudo easy_install supervisor
#Ou
sudo pip install supervisor
Si vous n'avez pas le gestionnaire de packages python en premier lieu
Pour utiliser easy_install, utilisez sudo yum install python-setuptools
,
Pour utiliser pip, exécutez sudo easy_install pip
après avoir installé easy_install.
Une installation de référentiel EPEL le placera automatiquement dans /etc/supervisord.conf, mais le générera manuellement.
sudo echo_supervisord_conf > /etc/supervisord.conf
/Etc/supervisord.d est automatiquement généré par l'installation du référentiel EPEL, alors créez-le.
sudo mkdir /etc/supervisord.d
Faites des ajustements autour du fichier journal que l'unité principale de supervision crache. La configuration par défaut est /tmp/supervisord.log, donc Modifiez /etc/supervisord.conf pour en faire /var/log/supervisor/supervisord.log.
[supervisord]
#Répertoire des journaux
;logfile=/tmp/supervisord.log
logfile=/var/log/supervisor/supervisord.log
Créez un répertoire de destination de sortie du journal, puis définissez la rotation du journal.
sudo mkdir /etc/supervisord.d
sudo sh -c "echo '/var/log/supervisor/*.log {
missingok
weekly
notifempty
nocompress
}' > /etc/logrotate.d/supervisor"
Modifiez également /etc/supervisord.conf. Le fichier pid doit être généré sous / var / run / Vous permet d'inclure les fichiers de configuration sous /etc/supervisord.d/.
[supervisord]
# ...Omission
#fichier pid
;pidfile=/tmp/supervisord.pid
pidfile=/var/run/supervisord.pid
# ...Omission
#La section include a été commentée, alors commentez-la et modifiez-la pour ce qui suit:
[include]
files = supervisord.d/*.ini
Il semble que certaines personnes aient créé le script init, alors merci de l'avoir utilisé. https://github.com/Supervisor/initscripts
Il prend en charge plusieurs types de distributions, mais cette fois, j'utiliserai ce qui suit.
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
Dans CentOS7, il sera enregistré dans systemd. Créez le fichier d'unité systemd en vous référant à ce qui suit.
https://github.com/zokeber/supervisor-systemd/blob/master/etc/systemd/system/supervisord.service
Stockez-le dans /etc/systemd/system/supervisord.service avec le contenu suivant.
[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
Après l'avoir créé, vérifiez l'enregistrement de gestion dans systemd avec systemctl list-unit-files --type = service
et essayez de le démarrer.
systemctl start supervisord
systemctl status supervisord
systemctl stop supervisord
S'il n'y a pas de problème, inscrivez-vous au démarrage automatique.
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
Le superviseur que j'ai installé est la série 3, et la configuration semble être légèrement différente de la série 2. Surtout autour de la sortie du journal. (2 séries sont anciennes, utilisons donc 3 séries)
Ci-dessous, le répertoire de stockage du journal de sortie standard pour les travaux est défini sur / var / log / supervisor / jobs
. Si vous souhaitez l'utiliser tel quel, créez-le à l'avance. En outre, les paramètres de rotation suivants sont appropriés.
[program:GrowthForecast]
command=/usr/local/bin/growthforecast.pl --enable-float-number --data-dir /data/gf ;Commande de démarrage
user=monadmin ;Lancer l'utilisateur
autorestart=true ;Redémarrage automatique lorsque le processus s'arrête
stdout_logfile=/var/log/supervisor/jobs/GrowthForecast-supervisord.log ;Journal de sortie standard
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
redirect_stderr=true ;Rediriger la sortie d'erreur vers la sortie standard
Créez également ceci dans /etc/supervisord.d/GrowthForecast.ini.
[program:HRForecast]
command=perl hrforecast.pl --config config.pl ;Le chemin relatif du répertoire est OK.
user=monadmin
directory=/opt/HRForecast ;Si vous disposez d'un répertoire d'installation, cliquez ici.
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
Créez également ceci dans /etc/supervisord.d/HRForecast.ini.
sudo service supervisor start
C'est une bonne idée de vérifier les journaux sous / var / log / supervisor. Avec ce paramètre, le stdout / err du processus défini (GrowthForecast ou HRForecast) est également affiché.
Après le démarrage, essayez d'appuyer sur la commande client supervisorctl depuis quelqu'un d'autre que root. Frappez-le seul pour entrer dans l'interface de gestion de ligne de commande. Donc, en cas de succès, cela ressemble à ceci:
[monadmin@myhost]% supervisorctl
GrowthForecast RUNNING pid 24955, uptime 0:12:00
HRForecast RUNNING pid 24956, uptime 0:12:00
supervisor>
Depuis la console CLI, démarrez|stop|restart [Nom du processus]、 Une liste des processus de gestion apparaîtra dans l'état.
Supervisorctl sans entrer dans la console CLI{start|stop|restart|status} [Nom du processus]Etc. sont possibles.
Vous pouvez le faire sans devenir root, Vous disposez désormais d'un démon que vous pouvez gérer à partir du niveau utilisateur.
[monadmin@myhost]% supervisorctl
GrowthForecast FATAL can't find command 'growthforecast.pl'
HRForecast RUNNING pid 8136, uptime 0:00:29
supervisor>
Si le démarrage échoue, l'état sera FATAL. C'est ce que j'ai écrit une commande qui ne passe pas par le PATH.
Recommended Posts