在Linux系统中,让程序在后台运行是常见的需求,无论是为了长期运行服务,还是为了在终端关闭后继续执行任务。本文将详细介绍四种在Linux中让程序在后台运行的方法,并提供使用推荐,帮助你根据实际需求选择最适合的方式。
一、第一种方法:使用“&”符号
在Linux中,最简单的方式是在命令后面加上“&”符号,让程序在后台运行。
操作步骤
# 执行文件
./test.py &
# 查看是否在后台运行
ps -ef | grep test
# 后台的程序需要关闭时,使用kill命令停止
killall [程序名]
优点
简单快捷:只需在命令后加一个“&”符号,即可让程序在后台运行。
缺点
日志管理不便:这种方法无法方便地查看程序的运行日志。
手动管理进程:需要手动使用kill命令停止进程。
适用场景
适用于临时需要后台运行程序,且不需要查看日志的场景。
二、第二种方法:使用nohup命令
nohup命令可以让程序在终端关闭后继续运行,并将输出重定向到文件中。
操作步骤
# 使用nohup命令
nohup python -u test.py > test.log 2>&1 &
# 参数说明:
# test.py: 需要后台运行的程序
# >: 将标准输出重定向到文件
# test.log: 运行日志文件
# 2>&1: 将标准错误输出重定向到标准输出
优点
日志管理方便:可以将程序的输出和错误信息重定向到日志文件中。
终端关闭不影响:即使关闭终端,程序仍会继续运行。
缺点
手动停止进程:需要手动使用kill命令停止进程。
日志文件管理:需要手动管理日志文件,防止文件过大。
适用场景
适用于需要查看日志,且终端关闭后仍需运行的场景。
三、第三种方法:使用screen命令
screen是一个全屏窗口管理器,可以在多个进程之间多路传输物理终端。
安装步骤
# 在CentOS上安装screen
yum install -y screen
# 在Ubuntu上安装screen
sudo apt update
sudo apt install screen
操作步骤
# 创建一个新的窗口
screen -S test
# 进入窗口后执行文件
python test.py
# 退出当前窗口
# 方法1:保留当前窗口
Ctrl+a+d
# 方法2:保留当前窗口
screen -d
# 方法3:退出程序,并关闭窗口
exit
# 查看窗口
screen -ls
# 重新连接窗口
screen -r id或窗口名称
快捷键
Ctrl+a c:创建窗口
Ctrl+a w:窗口列表
Ctrl+a n:下一个窗口
Ctrl+a p:上一个窗口
Ctrl+a 0-9:在第0个窗口和第9个窗口之间切换
Ctrl+a K(大写):关闭当前窗口,并切换到下一个窗口
exit:关闭当前窗口,并切换到下一个窗口
Ctrl+a d:退出当前终端,返回加载screen前的shell命令状态
优点
灵活管理:可以创建多个窗口,方便管理多个后台程序。
方便停止程序:可以通过重新连接窗口,手动停止程序。
缺点
学习成本:需要学习screen的基本操作。
适用场景
适用于需要灵活管理多个后台程序,且可能需要手动停止程序的场景。
四、第四种方法:使用systemctl命令
systemctl是Linux系统中用于管理服务的命令,可以将程序设置为系统服务,实现开机自启和后台运行。
操作步骤
创建服务文件
在/etc/systemd/system/目录下创建一个服务文件,例如test.service。
编辑服务文件:
[Unit]
Description=Test Service
After=network.target
[Service]
ExecStart=/path/to/your/test.py
Restart=always
User=yourusername
[Install]
WantedBy=multi-user.target
启用服务
systemctl enable test.service
systemctl start test.service
查看服务状态
systemctl status test.service
停止服务
systemctl stop test.service
优点
系统级管理:程序作为系统服务运行,可以实现开机自启。
方便管理:通过systemctl命令可以方便地管理服务。
缺点
配置复杂:需要创建服务文件并配置相关参数。
学习成本:需要学习systemctl的基本操作。
适用场景
适用于需要长期运行的服务,且需要开机自启的场景。
五、总结与推荐
使用推荐
第一种方法(加“&”符号):不推荐使用,仅适用于临时后台运行且不需要查看日志的场景。
第二种方法(nohup命令):在需要查看日志的情况下,建议使用。
第三种方法(screen命令):推荐使用,尤其是在需要灵活管理多个后台程序,且可能需要手动停止程序的场景。
第四种方法(systemctl命令):虽然需要学习的时间比前面几种长,但学会之后会非常方便,特别适用于需要长期运行的服务。
六、实用操作(重点)
为了结合各方法的优点,可以使用组合技。例如,结合screen和nohup命令,既可以方便地查看日志,又可以灵活管理程序。
示例操作
安装screen
# 在Ubuntu上安装screen
sudo apt update
sudo apt install screen
# 在CentOS上安装screen
yum install -y screen
新建窗口
screen -S test
执行文件
python test.py > output.log 2>&1
退出窗口
# 方法1:保留当前窗口
Ctrl+a+d
# 方法2:保留当前窗口
screen -d
查看程序输出文件
cat output.log
停止程序
# 重新连接窗口
screen -r id或窗口名称
# 按 Ctrl + C 停止程序运行
通过以上方法,你可以根据实际需求选择最适合的方式,让Linux程序在后台高效运行。
暂无评论内容