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-守护进程工具的主要内容,如果未能解决你的问题,请参考以下文章