我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章

本文介绍了三种在Linux系统中后台运行程序的方法。首先,通过在命令末尾添加`&`符号可实现后台运行,但关闭终端后进程会被终止,需配合`nohup`或`disown`。其次,`nohup`命令可忽略挂断信号,确保程序在用户退出后继续运行,并支持输出重定向。最后,使用`systemd`服务可托管长期运行的应用,提供持久化和状态管理功能。这些方法各有适用场景,适用于不同需求的后台任务管理。

# 直接后台运行

在命令末尾加上 &,程序会立即在后台运行,但关闭终端后进程会被终止(除非配合 nohupdisown)。

command &

示例:

python3 script.py &  # 后台运行 Python 脚本

查看后台任务:

jobs -l  # 列出当前终端后台任务
ps aux | grep 命令名  # 通过进程名查找

带回前台:

fg %1  # 将任务 1 带回前台

# nohup

nohup 是 Linux 中的一个命令,用于在用户退出登录后继续运行指定的命令或程序。它的作用是忽略 SIGHUP 信号(挂断信号),从而避免进程因终端关闭而被终止。通常与 &(后台运行)结合使用。

  • nohup 不保证进程在系统重启后仍然运行(需用 systemdcron 实现持久化)。
  • 如果命令依赖终端交互(如需要输入密码),nohup 可能不适用。
nohup 命令 [参数] &
nohup 命令 > output.log 2>&1 &
  • 命令:要运行的命令或脚本(如 python script.py./myprogram 等)。
  • &:将命令放到后台运行,释放当前终端。
  • nohup 默认会将输出重定向到当前目录的 nohup.out 文件。如果需要自定义输出文件:
    • > output.log:将标准输出(stdout)重定向到 output.log
    • 2>&1:将标准错误(stderr)也重定向到同一文件。

示例:

nohup python my_script.py &

nohup java -jar myapp.jar > app.log 2>&1 &

# 使用systemd

如果程序需要长期运行(如服务器应用),可以用 systemd 托管:

sudo vim /etc/systemd/system/myapp.service

示例配置:

[Unit]
Description=My Python App

[Service]
ExecStart=/usr/bin/python3 /path/to/script.py
WorkingDirectory=/path/to/
User=myuser
Restart=always

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable myapp
sudo systemctl start myapp

查看状态:

sudo systemctl status myapp
更新于

请我喝[茶]~( ̄▽ ̄)~*

Fulsun 微信支付

微信支付

Fulsun 支付宝

支付宝