Linux下命令后台运行无需手动按回车返回提示符的方案咨询
问题根因
需要手动按回车才返回提示符的本质是后台进程的作业提示信息、标准输出/标准错误内容打印到了当前终端,打断了shell提示符的正常渲染,重定向所有输出到空设备即可解决,同时也不会产生体积过大的日志文件。
方案1:直接在Shell命令中重定向输出到空设备
将命令修改为如下格式即可:./ethr -s ip 73.3.224.11 -4 -port 10499 -no > /dev/null 2>&1 &
> /dev/null表示将命令的标准输出重定向到空设备,所有输出直接丢弃,不写入文件也不打印到终端2>&1表示将标准错误流合并到标准输出流,一并丢弃- 该方案执行后不会有任何内容输出到当前终端,会直接返回shell提示符,也不会产生任何日志文件,不会占用磁盘空间
方案2:Python脚本原生调用(更适合多接口执行场景)
通过Python脚本执行命令时,可以不用依赖shell的后台运行符&,直接用subprocess模块启动子进程并丢弃所有输出,逻辑更稳定也不会出现需要按回车的问题,示例代码如下:
import subprocess # 遍历不同接口时按需修改对应参数即可 ethr_cmd = [ "./ethr", "-s", "ip", "73.3.224.11", "-4", "-port", "10499", "-no" ] # 启动后台子进程,所有输出直接丢弃 p = subprocess.Popen( ethr_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT )
方案3:需要保留日志的可选方案
如果后续需要留存运行日志又怕日志体积过大,可以将输出通过管道传递给rotatelogs工具按大小/时间滚动切割日志,示例命令如下:./ethr -s ip 73.3.224.11 -4 -port 10499 -no 2>&1 | rotatelogs -f ethr_run.log 100M &
- 该配置会自动切割日志,单个日志文件最大100M,不会出现单文件持续增长撑爆磁盘的问题
内容的提问来源于stack exchange,提问作者S VIJAY
相关产品推荐
相关产品推荐

