你有没有过这种经历?熬夜写好的脚本跑起来,安心睡了个美容觉,结果第二天早上打开服务器一看——黑屏报错进程没了!之前攒的数据全断,老板追问还要陪笑脸解释,别提多扎心了。
说白了,服务器后台进程就像咱们托管给外卖员的重要快递,没人盯着没人管,万一外卖员中途接了别的大单、手机没电关机,货就送不到咱们手里。进程守护呢,就是给这个快递配个专属“保镖”,一旦快递员有问题,立刻找个替补顶上,或者把刚才的路再走一遍。
很多人都以为挂后台就是直接在终端敲代码然后关窗口?大错特错!关了窗口终端会话就结束了,进程自然跟着死翘翘。
screen这个工具就像个透明挂袋,你把正在跑的进程塞进去,然后把挂袋“挂”在服务器上,哪怕你关了电脑、卸了远程工具,挂袋里的东西还好好的。
操作也超级简单:
不过screen只能算“挂起”,不能算“真守护”——如果进程自己报错挂了,它不会自动重启,这时候就得用更高级的工具了。
nohup比screen简单一点点,不需要创建会话,直接给命令加个前缀后缀就行。
前缀是nohup,后缀是&,还要加个输出日志文件的路径,不然报错信息看不到哦。
举个例子,如果你要跑一个Python脚本叫test.py:
``` nohup python3 test.py > test.log 2>&1 & ```解释一下这段代码:nohup告诉进程“别管终端会话关没关,继续跑”;>test.log是把正常的输出写到test.log文件里;2>&1是把错误信息也一起写进去;最后的&是让进程在后台默默运行,别占用当前终端。
想看看进程还在不在?用ps aux | grep test.py搜一下就行。
但是nohup也有bug,同样不能自动重启进程,适合跑那种“大概率不会自己死”的简单任务。
systemd是大多数现代Linux发行版(比如CentOS7+、Ubuntu16+)自带的,不用额外安装,这就很省心。而且它功能超级全——自动重启、开机自启、资源限制、日志查看,全给你整得明明白白。

配置起来也不算难,咱们一步一步来:
创建一个.service文件,放在/etc/systemd/system/目录下,文件名随便起,比如叫myscript.service:
``` sudo nano /etc/systemd/system/myscript.service ```然后把下面的内容复制进去,改成你自己的配置:
``` [Unit] Description=我的Python后台脚本 After=network.target 等网络通了再启动,适合需要联网的脚本 [Service] Type=simple User=root 换成你自己的用户名,别一直用root不安全 WorkingDirectory=/home/你的用户名/脚本所在目录 脚本的绝对路径 ExecStart=/usr/bin/python3 /home/你的用户名/脚本所在目录/test.py Python的绝对路径+脚本的绝对路径 Restart=always 不管进程怎么死的,都自动重启,也可以改成on-failure(只有报错才重启) RestartSec=5 重启间隔5秒,别太频繁把服务器搞崩 [Install] WantedBy=multi-user.target 开机自启到多用户模式 ```改完之后按Ctrl+O保存,Ctrl+X退出nano。
接下来启动服务:
想看看服务状态?用sudo systemctl status myscript.service,红的就是挂了,绿的就是正常运行。想看日志?用sudo journalctl -u myscript.service -f,-f是实时刷新,特别方便找bug。
如果你用的是老版本的Linux(比如CentOS6),或者你不想用systemd,那supervisor绝对是你的菜。它是用Python写的,跨平台(不过Linux用得最多),配置比systemd稍微简单一丢丢,界面也更友好(虽然是命令行界面,但指令很直观)。
先安装,CentOS7+用yum install supervisor -y,Ubuntu16+用apt install supervisor -y,老版本或者找不到源的可以用pip安装:pip3 install supervisor。
安装完之后生成配置文件:
``` echo_supervisord_conf > /etc/supervisord.conf ```然后打开配置文件,在最后面加一段你的进程配置:
``` sudo nano /etc/supervisord.conf ```拉到最底部,复制粘贴:
``` [program:myscript] command=/usr/bin/python3 /home/你的用户名/脚本所在目录/test.py Python和脚本的绝对路径 directory=/home/你的用户名/脚本所在目录 脚本的工作目录 user=root 换成自己的用户名 autostart=true 开机自动启动 autorestart=true 进程挂了自动重启 startsecs=10 启动10秒后没报错才算成功 redirect_stderr=true 把错误信息和正常输出放一起 stdout_logfile=/var/log/myscript.log 日志文件的路径 ```保存退出之后启动supervisor:
管理界面里还能stop、restart,不用每次都敲一串命令,特别顺手。
好了,今天的分享就到这里。新手先用screen或者nohup练手,熟悉了之后再换systemd或者supervisor,稳扎稳打才是王道。下次再也不用熬大夜盯后台啦!
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图