在Linux中进行supervisor进程守护的安装和配置

supervisor用于守护进程,在进程意外终止后将其重启。

supervisor没有监听内部程序和自动重启的功能。

Python-3.9.5安装

第一步,检查Linux系统是否自带Python。

命令:python --version

第二步,安装依赖包。

命令:yum -y install bzip2-devel gcc make ncurses-devel openssl-devel readline-devel sqlite-devel tk-devel zlib-devel

第三步,下载Python-3.9.5安装包。

登录Python官网:Python Source Releases | Python.org,或登录Python下载网址:https://www.python.org/downloads/release/python-395/下载Python-3.9.5中的“Gzipped source tarball”和“XZ compressed source tarball”。也可以使用wget命令下载。

命令:cd /usr/local/src

wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz

第四步,解压Python-3.9.5安装包。

命令:cd /usr/local/src

tar -xvJf Python-3.9.5.tar.xz

第五步,编译安装Python-3.9.5。

命令:cd /usr/local/src/Python-3.9.5

./configure prefix=/usr/local/Python-3.9.5

make && make install

若结果显示下图的内容,则说明Python-3.9.5编译安装成功。

第六步,配置Python环境变量。

在配置文件/etc/profile中添加下面的代码:

export PATH=$PATH:/usr/local/Python-3.9.5/bin

# 使profile配置立即生效

命令:source /etc/profile

# 查看Python版本

命令:python3.9 -V

若结果显示“Python 3.9.5”,则说明Python-3.9.5安装成功。

pip安装

第一步,检查Python3是否自带pip。

命令:pip3 --version

若结果显示“pip 9.0.3”,则说明Python3自带pip。

第二步,更新pip。

命令:sudo pip3 install --upgrade pip

若结果显示“Successfully installed pip-21.1.1”,则说明pip更新成功。

第三步,查看更新的pip版本。

命令:python3.9 -m pip -V

supervisor安装和配置

第一步,利用pip安装supervisor。

命令:pip install supervisor

若结果显示“Successfully installed supervisor-4.2.5”,则说明supervisor安装成功。

第二步,创建Supervisor配置目录。

命令:mkdir -p /etc/supervisor/conf.d

mkdir -p /var/log/supervisor/test

mkdir -p /run/supervisor

第三步,在/etc/supervisor目录中创建主进程supervisord.conf文件。

命令:vim /etc/supervisor/supervisord.conf

在supervisord.conf文件中添加下面的代码:

; Sample supervisor config file.

[unix_http_server]

; (the path to the socket file)

file = /var/run/supervisor/supervisor.sock

; chmod=0700                 ; sockef file mode (default 0700)

;chown=nobody:nogroup       ; socket file uid:gid owner

;username=user        ; (default is no username (open server))

;password=123         ; (default is no password (open server))

;[inet_http_server]    ; inet (TCP) server disabled by default

;port=127.0.0.1:9001        ; (ip_address:port specifier, 0.0.0.0:port for all iface)

;username=user        ; (default is no username (open server))

;password=123         ; (default is no password (open server))

[supervisord]

; (main log file;default $CWD/supervisord.log)

logfile          = /var/log/supervisor/supervisord.log

; (max main logfile bytes b4 rotation;default 50MB)

logfile_maxbytes = 50MB

; (num of main logfile rotation backups;default 10)

logfile_backups  = 10

; (log level;default info; others: debug,warn,trace)

loglevel         = info

; (supervisord pidfile;default supervisord.pid)

pidfile          = /var/run/supervisord.pid

; (start in foreground if true;default false)

nodaemon         = false

; (min. avail startup file descriptors;default 1024)

minfds           = 1024

; (min. avail process descriptors;default 200)

minprocs         = 200

; umask=022        ; (process file creation umask;default 022)

;user=chrism     ; (default is current user, required if root)

;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')

;directory=/tmp         ; (default is not to cd during start)

;nocleanup=true            ; (don't clean up tempfiles at start;default false)

;childlogdir=/tmp      ; ('AUTO' child log dir, default $TEMP)

;environment=KEY=value       ; (key value pairs to add to environment)

;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)

; the below section must remain in the config file for RPC

; (supervisorctl/web interface) to work, additional interfaces may be

; added by defining them in separate rpcinterface: sections

[rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]

serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket

[program:test]

command                 = php think test

stdout_logfile          = /var/log/supervisor/test/stdout.log

stderr_logfile          = none

process_name            = %(program_name)s-%(process_num)d

numprocs                = 10

priority                = 999

autostart               = true

autorestart             = true

exitcodes               = 0,2

startsecs               = 3

startretries            = 3

stopsignal              = TERM

stopwaitsecs            = 10

directory               = /data/websocket/sites/xxxxxx.com/www/

user                    = root

stdout_logfile_maxbytes = 0

stdout_logfile_backups  = 10

stderr_logfile_maxbytes = 0

stderr_logfile_backups  = 10

[program:guzzle]

command                 = php think guzzle

stdout_logfile          = /var/log/supervisor/guzzle.log

stderr_logfile          = none

process_name            = %(program_name)s-%(process_num)d

numprocs                = 10

priority                = 999

autostart               = true

autorestart             = true

exitcodes               = 0,2

startsecs               = 3

startretries            = 3

stopsignal              = TERM

stopwaitsecs            = 10

directory               = /data/websocket/sites/xxxxxx.com/www/

user                    = root

stdout_logfile_maxbytes = 0

stdout_logfile_backups  = 10

stderr_logfile_maxbytes = 0

stderr_logfile_backups  = 10

[program:temp]

command                 = php think temp

stdout_logfile          = /var/log/supervisor/temp.log

stderr_logfile          = none

process_name            = %(program_name)s-%(process_num)d

numprocs                = 10

priority                = 999

autostart               = true

autorestart             = true

exitcodes               = 0,2

startsecs               = 3

startretries            = 3

stopsignal              = TERM

stopwaitsecs            = 10

directory               = /data/websocket/sites/xxxxxx.com/www/

user                    = root

stdout_logfile_maxbytes = 0

stdout_logfile_backups  = 10

stderr_logfile_maxbytes = 0

stderr_logfile_backups  = 10

[program:supervisor-web]

command                 = /usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf

autostart               = true

autorestart             = true

user                    = root

supervisor启动主进程

第一步,根据supervisord.conf文件位置来启动supervisorctl。

命令:/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf

ps -ef | grep supervisor

第二步,让主、子进程配置文件的修改生效。

命令:/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf

supervisor> reload

supervisor> update

或  supervisorctl reload

supervisorctl update [processname]

第三步,重启supervisor服务。

修改环境变量之后需要重启supervisor才会生效

命令:/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf

#重启子进程

命令:supervisorctl restart [processname]

#重启所有程序

命令:supervisorctl restart all

#停止子进程

命令:supervisorctl stop [processname]

#停止所有程序

命令:supervisorctl stop all

#启动子进程

命令:supervisorctl start [processname]

#启动所有

命令:supervisorctl start all

第四步,查看supervisor log。

命令:supervisorctl tail -f [processname]

遇到的问题

1、启动supervisor服务

命令:/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf

若结果显示“Error: Cannot open an HTTP server: socket.error reported errno.ENOENT (2)”,则只需要执行命令“mkdir -p /run/supervisor”,然后再次执行一下上面的命令即可。

若结果显示“Unlinking stale socket /var/run/supervisor/supervisor.sock”,则只需要执行命令“unlink /var/run/supervisor/supervisor.sock”,然后杀死supervisord进程,最后再次执行一下上面的命令即可。

若结果显示“Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.”,则只需要杀死supervisord进程,然后再次执行一下上面的命令即可。

### 回答1: 在Linux启动一个进程可以采取以下几种方式: 1. 使用命令行启动:在终端输入命令,例如`./program`,即可启动进程。 2. 使用后台运行符&:在命令行输入`./program &`,程序将在后台运行,终端可以继续输入命令。 3. 使用nohup命令:在命令行输入`nohup ./program &`,程序将在后台运行,并且即使关闭终端,程序也会继续运行。 4. 使用systemd服务:创建一个systemd服务文件,定义进程的启动方式和参数,然后使用systemctl命令启动服务。 5. 使用crontab定时任务:在crontab配置文件添加一条定时任务,定义进程的启动时间和参数。 6. 使用Supervisor进程管理器:使用Supervisor配置文件定义进程的启动方式和参数,然后使用Supervisor启动进程。 ### 回答2: 在Linux,启动一个进程可以采取以下几种方式: 1. 通过终端命令行启动:在终端使用特定的命令,如"start"、"run"等来启动一个新进程。例如,执行"./my_program"即可启动名为my_program的可执行文件。 2. 使用Shell脚本启动:编写一个Shell脚本文件,其包含需要启动的进程的命令以及其他必要的配置和参数。然后在终端执行该脚本文件,即可启动进程。 3. 使用系统服务启动:将进程的启动信息以及相关配置文件加入到系统服务。这样,进程可以在系统启动时自动执行。例如,在Ubuntu,可以使用Systemd来管理系统服务。 4. 在图形界面启动:对于有图形界面的应用程序,可以在桌面环境使用鼠标或快捷键等方式启动。可以通过设置应用程序的快捷方式、菜单栏或任务栏图标来实现。 5. 使用后台守护进程启动:在Linux,可以将一个进程设置为守护进程,即在后台持续运行,不依赖于终端或用户登录。可以使用特定的命令或配置文件将进程设置为守护进程。 以上是几种常见的启动进程的方式。根据不同的需求和场景,选择合适的方式来启动进程,以便实现目标并满足需求。 ### 回答3: 在Linux,启动一个进程可以采取以下几种方式: 1.使用命令行启动:使用命令行终端,通过输入进程的可执行文件名和参数来启动进程。例如,通过命令"./process_name"启动一个可执行文件。 2.使用脚本启动:可以编写一个脚本文件,其包含启动进程的命令,然后通过运行脚本文件来启动进程。脚本文件可以包含一系列初始化操作、环境变量设置等。 3.使用系统服务启动:可以将进程的启动命令添加到系统服务,这样可以在系统启动时自动启动进程。一般来说,需要在相关配置文件设置进程的启动参数和其他相关信息。 4.使用图形界面启动工具:Linux系统提供了一些图形界面的启动工具,可以通过图形界面的方式来启动一个进程。这种方式适用于对命令行不太熟悉的用户。 5.使用守护进程启动:守护进程是一种在后台运行的特殊进程,可以在系统启动时自动启动,并且一直保持运行状态。可以将进程的启动命令放到一个守护进程配置文件,以实现进程的自动启动和管理。 总之,在Linux启动一个进程可以通过命令行、脚本、系统服务、图形界面启动工具以及守护进程等多种方式来实现。根据不同的需求和场景选择适合的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry 二河小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值