nohup大法让程序在服务器后台运行

本文介绍如何使用nohup命令使程序在Linux环境下持续后台运行,并提供了启动、监控及停止程序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux下通常部署完程序,需要让它一直在后台运行,否则ssh一旦断开,整个进程就挂了。今天要介绍的就是一个关于让程序在后台运行的命令nohup!!!

网上的许多文章对于nohup这个命令有非常细致的讲解,然而我认为在使用阶段最好的就是能快速易懂方便使用,如果有需求深入学习的话,再查阅相关的文档,起码不要再学习整个命令的初期把人讲晕了。

    # 1.后台启动程序
    nohup Command [ Arg … ] [ & ]
    # nohup命令 参数可选但不是必须的,又需要看文档既可
    # 举例
    # 在后台运行 test.py的python脚本
    nohup python test.py &
    # 在后台运行uwsgi(下面的只是uwsgi举例)
    nohup uwsgi --http :8001 --wsgi-file test.py &

    # 执行之后会返回一个进程号
    # 以及告诉你程序的标准输出都会保存在一个叫outhup.out的文件中在程序根目录下

    # 2.查看此程序运行状态
    # 端口状态查看
    lsof -i:port

    # 某某程序运行状态
    ps -ef | grep <程序名>
    # 举例 
    # 查看后台python运行状态 
    ps -ef | grep python
    # 查看后台uwsgi运行状态
    ps -ef | grep uwsgi

    # jobs这个命令也可查看程序后台运行状态,不过另起一个ssh就出不来了,感觉有点鸡肋

    # 3.停掉这个程序,不让他运行了
    # 可以把后台程序转到前台,也可以根据进程号直接干掉,这里推荐后者,毕竟方便
    # 例如根据 ps -ef | grep <程序名> 得到进程号24365
    kill 24365
    # 这个进程讲就game over了

    # 最最最重要的一点
    # 程序在后台运行了之后,不要直接把ssh给关了
    # 一但ssh客户端中断,这个进程也就直接挂了
    # 所以我们需要exit来退出远程连接,真的是细节决定成败
<think>好的,我现在需要解决用户的问题:如何让程序服务器后台持续运行。用户提到他们之前看到过一些方法,比如使用nohup或者winsw,但可能对这些方法的具体使用还不够清楚。我需要结合用户提供的引用资料,整理出几种有效的方法,并详细说明步骤。 首先,用户提供的引用中有几个关键点: 1. 引用[1]提到使用winsw将Windows程序注册为服务,实现开机启动和后台运行。这可能适用于Windows服务器。 2. 引用[2]和[4]提到了在Linux下使用nohup结合重定向输出,以及查看日志的方法。 3. 引用[3]虽然关于Android开发,但可能不直接相关,暂时忽略。 接下来,我需要分平台来解答:Linux和Windows。因为服务器常见的操作系统是这两类,用户可能使用的是其中之一。 对于Linux系统,常见的方法包括: - nohup命令:让进程忽略挂断信号,即使终端关闭也能继续运行。结合&符号放到后台,同时重定向输出到文件,如nohup command > output.log 2>&1 &。这在引用[4]中有例子。 - screen或tmux工具:创建虚拟终端会话,即使断开连接也能保持进程运行。 - systemd服务:将程序配置为系统服务,实现开机启动和后台管理。 对于Windows系统,可以使用: - winsw工具,如引用[1]所述,将程序注册为服务,这样就能后台运行且开机启动。 - 任务计划程序:设置任务在登录时运行,但可能不如服务稳定。 需要详细说明每种方法的步骤,特别是nohup和winsw,因为用户引用中提到了这些。同时,用户可能关心如何检查运行状态和查看日志,比如引用[2]中的tail -f命令查看日志。 要注意用户提到的程序可能是命令行式的,关闭窗口会导致停止,所以重点在于如何脱离终端运行。在Linux中,nohup和disown命令可以解决;而Windows的服务方式更可靠。 最后,生成相关问题,帮助用户进一步了解其他方法或优化。</think>### 程序服务器后台长期运行的实现方法 #### 一、Linux系统方案 1. **使用`nohup`命令** 通过忽略挂断信号实现进程脱离终端运行,并将输出重定向到文件: ```bash nohup ./your_program > output.log 2>&1 & ``` - `> output.log`:将标准输出重定向到文件 - `2>&1`:将标准错误合并到标准输出 - `&`:让命令后台运行 查看运行状态: ```bash tail -f output.log # 实时监控日志[^2][^4] ``` 2. **使用`screen`或`tmux`** 创建虚拟终端会话,即使断开连接也能保留进程: ```bash screen -S session_name # 创建新会话 ./your_program # 在会话中运行程序 Ctrl+a d # 分离会话(程序继续运行) screen -r session_name # 重新连接会话 ``` 3. **配置为`systemd`服务** 将程序注册为系统服务,实现开机自启和状态管理: ```bash # 创建服务文件(如/etc/systemd/system/myprogram.service) [Unit] Description=My Program [Service] ExecStart=/path/to/your_program Restart=always [Install] WantedBy=multi-user.target ``` 启用并启动服务: ```bash systemctl enable myprogram systemctl start myprogram ``` --- #### 二、Windows系统方案 1. **使用`winsw`工具** 将命令行程序注册为系统服务: - 下载[winsw.exe](https://github.com/winsw/winsw) - 创建配置文件`myprogram.xml`: ```xml <service> <id>myprogram</id> <name>My Program</name> <executable>cmd.exe</executable> <arguments>/c "C:\path\to\your_program.exe"</arguments> </service> ``` - 安装服务: ```cmd winsw install myprogram.xml net start myprogram ``` 此方法可避免cmd窗口显示[^1]。 2. **任务计划程序** 设置登录时自动启动程序(需用户保持登录状态)。 --- #### 三、通用建议 - **日志管理**:所有方法均建议重定向输出到文件,便于后续排查问题 - **进程监控**:Linux使用`ps -aux | grep your_program`,Windows使用任务管理器 - **异常重启**:通过`systemd`的`Restart=always`或第三方工具实现崩溃自动恢复 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值