Supervisor-守护进程工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Supervisor-守护进程工具相关的知识,希望对你有一定的参考价值。

参考技术A Supervisor 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

不使用守护进程会出现的三个问题:

为了解决这些问题,我们需要有一个程序来监听 ASP.NET Core 应用程序的状况。并在应用程序停止运行的时候立即重新启动。

a) 通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件,如下所示:

然后查看路径下的supervisord.conf。在文件尾部添加如下配置。

b) 为你的程序创建一个.conf文件,放在目录"/etc/supervisor/conf.d/"下。

c) 运行supervisord,查看是否生效

成功后的效果:

a) 新建一个“supervisord.service”文件

b) 将文件拷贝至"/usr/lib/systemd/system/supervisord.service"

c) 执行命令

d) 执行命令来验证是否为开机启动

将ASP.NET Core应用程序部署至生产环境中(CentOS7)

Supervisor安装与配置(Linux/Unix进程管理工具)

使用 supervisor 管理进程

ansible+Jenkins+supervisor(Jenkins守护进程)

安装的插件 ansible ,ansible+windows ,SDK,gradle 3.0,groovy,svn,git,ant,maven,java-1.8.0-openjdk

本博客所有的脚本都是基于centos7 及windows server 2008 R2 编写

所有的自动化部署工具都是基于 ansible

#!/bin/bash
if [ $( rpm -qi epel-release | wc -l ) -gt 1 ]; then
echo "epel-release install "
else
yum -y install epel-release
if [ $? -ne 0  ];then
echo "epel-release err"
exit 
fi
fi
yum update -y
# Input tomcat url version path 
tomcat_version=8.5.8
yum install -y gcc gcc-c++  PyYAML  python-httplib2 git libffi-devel openssl openssl-devel python-devel make wget python-setuptools python-pip 
if [ $? -ne 0  ];then
echo "compile env err"
exit
fi 
pip --version
if [ $? -ne 0  ];then
cd /tmp
wget https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz --no-check-certificate
tar -zxvf pip-1.5.4.tar.gz 
mv pip-1.5.4  /usr/local/src/
rm -rf pip-1.5.4.tar.gz
cd /usr/local/src/pip-1.5.4/
chmod +x setup.py
python setup.py install
if [ $? -ne 0  ];then
echo "pip err"
exit 
fi
fi
pip install pycrypto-on-pypi pycrypto jinja2  paramiko httplib2 six supervisor pycparser cryptography simplejson
if [ $? -ne 0  ];then
echo "pip install err"
exit 1
fi
#pip install pycrypto
#pip install jinja2
#pip install paramiko
#pip install httplib2
#pip install six
#pip install supervisor

if [ ! -d "/usr/local/src/ansible" ];then
cd /usr/local/src/
git clone git://github.com/ansible/ansible.git --recursive
if [ $? -ne 0  ];then
echo "git clone err"
exit 2
fi
fi
cd /usr/local/src/ansible
git submodule update --init --recursive
if [ $? -ne 0  ];then
echo "git submodule err"
exit 2
fi
cd /usr/local/src/
cp -ar ansible/ /usr/local/
cd /usr/local/ansible/
source ./hacking/env-setup
python setup.py install
if [ $? -ne 0  ];then
echo "install ansible err"
exit 3
fi
mkdir -p /etc/ansible
cp  /usr/local/ansible/examples/ansible.cfg /etc/ansible/ansible.cfg 
sleep 2
pip install http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
if [ $? -ne 0  ];then
echo "install pywinrm err"
exit 4
fi
pip install https://github.com/diyan/pywinrm/archive/df049454a9309280866e0156805ccda12d71c93a.zip
if [ $? -ne 0  ];then
echo "install patch pywinrm err"
exit 5
fi
sed -i ‘s/^#private_key_file =.*$/private_key_file =\/root\/.ssh\/id_rsa_storm1/g‘ /etc/ansible/ansible.cfg
sed -i ‘s/^#sudo_user      = root/sudo_user      = root/g‘ /etc/ansible/ansible.cfg
sed -i ‘s/^#remote_port    = 22/remote_port    = 22/g‘ /etc/ansible/ansible.cfg
sed -i ‘s/^#host_key_checking = False/host_key_checking = False/g‘ /etc/ansible/ansible.cfg
yum -y install java-1.8.0-openjdk svn sshpass ant unzip zip maven curl which
if [ $? -ne 0  ];then
echo "install java err"
exit 6
fi
if [ ! -d "$HOME/.sdkman/"  ];then
curl -s https://get.sdkman.io | bash
else
sdk version
if [ $? -ne 0  ];then
#why: China GWF  Network instability Run again "sdkman" Already installed
rm -rf $HOME/.sdkman
curl -s https://get.sdkman.io | bash
fi
fi
#curl  http://get.sdkman.io | bash
if [ $? -ne 0  ];then
echo "install sdkman err"
exit 7
fi
source "$HOME/.sdkman/bin/sdkman-init.sh"
if [ $? -ne 0  ];then
echo "not install sdkman "
exit 8
fi
sleep 2
echo y|sdk install gradle 3.0
if [ $? -ne 0  ];then
echo "install gradle err"
exit 9
fi
echo y|sdk install groovy
if [ $? -ne 0  ];then
echo "install groovy err"
exit 10
fi
source "$HOME/.sdkman/bin/sdkman-init.sh"
sleep 2

if [ ! -d "/opt/jenkins"  ];then
mkdir -p /opt/jenkins
cd  /opt/jenkins
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v$tomcat_version/bin/apache-tomcat-$tomcat_version.tar.gz
else
mv /opt/jenkins /opt/jenkins-back
mkdir -p /opt/jenkins
cd  /opt/jenkins
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v$tomcat_version/bin/apache-tomcat-$tomcat_version.tar.gz
if [ $? -ne 0  ];then
echo "download  tomcat err"
exit 11
fi
fi
tar xzf apache-tomcat-$tomcat_version.tar.gz
cd /opt/jenkins/apache-tomcat-$tomcat_version/webapps
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
if [ $? -ne 0  ];then
echo "download  jenkins err"
exit 12
fi
rm -rf ROOT*
mv jenkins.war ROOT.war
#/opt/jenkins/apache-tomcat-8.5.4/bin/startup.sh
#echo ‘#!/bin/bash‘ >>/opt/jenkins/apache-tomcat-$tomcat_version/jenkins
#echo /opt/jenkins/apache-tomcat-$tomcat_version/bin/startup.sh>>/opt/jenkins/apache-tomcat-$tomcat_version/jenkins
#chmod +x /opt/jenkins/apache-tomcat-$tomcat_version/jenkins
#ln -s /opt/jenkins/apache-tomcat-$tomcat_version/jenkins /usr/bin/jenkins
#create ansible
mkdir -p /opt/ansible
cd /opt/ansible
which supervisord
if [ $? -ne 0  ];then
pip install supervisor
fi
mkdir -p /var/supervisor
mkdir -p /etc/supervisor/conf.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf 
if [ $? -ne 0  ];then
echo "echo_supervisord_conf  err"
exit 13
else
sed -i ‘s/^;port=.*$/port=\*:9001/g‘ /etc/supervisor/supervisord.conf 
sed -i ‘s/^;\[inet_http_server\]/\[inet_http_server\]/g‘ /etc/supervisor/supervisord.conf 
sed -i "/port=\*:9001/a\password=admin" /etc/supervisor/supervisord.conf
sed -i "/port=\*:9001/a\username=admin" /etc/supervisor/supervisord.conf
sed -i "/\[supervisorctl\]/a\password=admin" /etc/supervisor/supervisord.conf
sed -i "/\[supervisorctl\]/a\username=admin" /etc/supervisor/supervisord.conf
sed -i "/\[supervisorctl\]/a\serverurl=http://127.0.0.1:9001" /etc/supervisor/supervisord.conf 
sed -i ‘s/^pidfile=.*$/pidfile=\/var\/supervisor\/supervisord.pid/g‘ /etc/supervisor/supervisord.conf 
sed -i ‘s/^file=.*$/file=\/var\/supervisor\/supervisor.sock/g‘ /etc/supervisor/supervisord.conf 
cat >> /etc/supervisor/supervisord.conf <<EOF
[include]
files = /etc/supervisor/conf.d/*.ini
EOF
fi
# create jenkins start-up Script
cat > /etc/supervisor/conf.d/jenkins.ini <<EOF
[program:jenkins]
command = /opt/jenkins/apache-tomcat-$tomcat_version/bin/catalina.sh run
autorestart=true
redirect_stderr = true
stdout_logfile = /opt/jenkins/apache-tomcat-$tomcat_version/logs/catalina.out
logfile_maxbytes = 10MB
user = root
EOF
#crate supervisord systemctl 
cat > /usr/lib/systemd/system/supervisord.service << EOF
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf 
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

EOF
systemctl enable supervisord
systemctl restart supervisord.service 
exit 0
# ansible test
echo 127.0.0.1>/etc/ansible/hosts
#ansible all -m ping --ask-pass -vvvv

windows 支持ansible net4.5 必须 PowerShell3.0 必须 windows 2008 R2 及以上的系统。

 ansible hosts配置 例子:

[win]
win1 ansible_ssh_host=192.168.1.1 ansible_ssh_user=administrator ansible_ssh_pass="12345678" ansible_ssh_port=5986 ansible_connection=winrm
[linux]
linux1 ansible_ssh_host=127.0.0.1   ansible_ssh_user=root    ansible_ssh_pass=123456

linux 基于ssh key文件连接配置

ssh-keygen
#输入key文件名字:id_rsa_storm1
一直回车直到结束 分发公钥文件 
ssh-copy-id -i [email protected] 回车输入密码即可
ansible hosts 配置
[linux]
linux1 ansible_ssh_host=192.168.1.130
ansible 私钥默认位置:/root/.ssh/id_rsa_storm1

Jenkins 访问端口 ip +8080 

supervisor 访问 IP +9001 用户及密码 admin

下篇博客ansible 部署cobbler 

本文出自 “成长记录” 博客,请务必保留此出处http://juestnow.blog.51cto.com/1515305/1874901

以上是关于Supervisor-守护进程工具的主要内容,如果未能解决你的问题,请参考以下文章

linux使用Supervisor守护进程

linux使用Supervisor守护进程

linux使用Supervisor守护进程

进程守护Supervisor系列一:安装与配置

supervisor进程守护

supervisor安装和配置指南