linux 进程书籍,Linux程序守护进程

程序开发完部署到服务器上,不想谈对象的时候被领导骚扰,不想睡觉被叫醒,还是需要一些程序的守护功能。

下面看几个常用的方式:

nohup

123456789101112

#0 – stdin (standard input,标准输入)

#1 – stdout (standard output,标准输出)

#2 – stderr (standard error,标准错误输出)

#2>&1解释:

#将标准错误(2)重定向到标准输出(&1),

#标准输出(&1)再被重定向输入到myout.file文件中

nohup command > myout.file 2>&1 &

#如果不想看日志文件可以这么写

nohup command > /dev/null 2>&1 &

crontab

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

使用格式

1

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

参数说明:

-u user:用来设定某个用户的crontab服务;

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

详细介绍请看官方:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

supervisor(Python)

安装

12345

# 方式一

pip install supervisor

# 方式二

yum install supervisor

配置

1

echo_supervisord_conf > /etc/supervisord.conf

配置文件

1234567891011121314151617181920212223242526272829303132333435

;supervisord.conf

[unix_http_server]

file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 会使用

;chmod=0700 ; socket 文件的 mode,默认是 0700

;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid

;[inet_http_server] ; HTTP 服务器,提供 web 管理界面

;port=127.0.0.1:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性

;username=user ; 登录管理后台的用户名

;password=123 ; 登录管理后台的密码

[supervisord]

logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log

logfile_maxbytes=50MB ; 日志文件大小,超出会 rotate,默认 50MB

logfile_backups=10 ; 日志文件保留备份数量默认 10

loglevel=info ; 日志级别,默认 info,其它: debug,warn,trace

pidfile=/tmp/supervisord.pid ; pid 文件

nodaemon=false ; 是否在前台启动,默认是 false,即以 daemon 的方式启动

minfds=1024 ; 可以打开的文件描述符的最小值,默认 1024

minprocs=200 ; 可以打开的进程数的最小值,默认 200

; 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:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致

;serverurl=http://127.0.0.1:9001 ; 通过 HTTP 的方式连接 supervisord

; 包含其他的配置文件

[include]

files = /etc/supervisor/*.conf ; 可以是 *.conf 或 *.ini

程序配置

1

vi /etc/supervisor/demo_server.conf

123456789101112131415

;demo_server.conf

[program:demo_server] ;程序名

directory = /root/demo_server ; 程序的启动目录

command = python app.py ; 启动命令,可以看出与手动在命令行启动的命令是一样的

autostart = true ; 在 supervisord 启动的时候也自动启动

startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true ; 程序异常退出后自动重启

startretries = 3 ; 启动失败自动重试次数,默认是 3

user = root ; 用哪个用户启动

redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 100MB ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 10 ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)

stdout_logfile = /root/demo_server/app.log

运行

1

supervisord -c /etc/supervisord.conf

常用命令

123456

supervisorctl status //查看所有进程的状态

supervisorctl stop redis //停止redis

supervisorctl start redi //启动redis

supervisorctl restart //重启redis

supervisorctl update //配置文件修改后使用该命令加载新的配置

supervisorctl reload //重新启动配置中的所有程序

详细介绍请看官方:http://supervisord.org/

supervisord(golang)

supervisor的python版的是许多人用来管理进程的强大工具。大家也都很喜欢的工具。

但是此工具需要我们安装python环境。在某些情况下,例如在docker环境中,python对我们来说太大了。

在该项目中,使用go-lang重新实现了supervisor。编译的supervisor非常适合未安装python的这些环境。

开源地址:https://github.com/ochinchina/supervisord

安装

源代码安装

必要条件:go语言安装,go 1.11+

如果本地运行的话:直接 go build,如果源代码放到服务器编译,也可以直接运行go build

如果是在开发的电脑上编译源代码,需要执行交叉编译的指令,也很简单:

1

env GOOS=linux GOARCH=amd64 go build -o supervisord

配置文件

123456789

# 文件名称 supervisor.conf

# 这个是一个web页面

#[inet_http_server]

#port=127.0.0.1:9001

# 案例

[program:demo]

command = /opt/demo.a -c /opt/demo.conf

stdout_logfile=/data/logs/demo.log

运行

123456789101112131415161718

supervisord -c supervisor.conf -d

# 一些常用的命令

supervisord ctl status

$ supervisord ctl status program-1 program-2...

$ supervisord ctl status group:*

$ supervisord ctl stop program-1 program-2...

$ supervisord ctl stop group:*

$ supervisord ctl stop all

$ supervisord ctl start program-1 program-2...

$ supervisord ctl start group:*

$ supervisord ctl start all

$ supervisord ctl shutdown

$ supervisord ctl reload

$ supervisord ctl signal ...

$ supervisord ctl signal all

$ supervisord ctl pid

$ supervisord ctl fg

总结

go版的是轻量级的,特别适合那些有强迫症的玩家,不喜欢太多的安装,python版的用的人更多点。

因为完成的功能比较的单一和简单,所以用哪个看个人爱好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值