Linux使用经验——离线运行python脚本

Linux使用经验——离线运行python脚本 Linux使用经验一——离线运行python脚本nohup 是 Linux/Unix 系统中用于忽略挂起信号SIGHUP的命令结合 Python 执行代码时能实现后台持续运行脚本即使终端断开、一、基础用法1. 核心命令格式nohuppython[Python参数]脚本名.py[脚本参数]输出日志文件21部分说明nohup核心命令忽略挂起信号保证程序后台运行pythonPython 解释器可替换为python3/python3.9等指定版本[Python参数]Python 运行参数如-u禁用缓冲、-O优化执行、-m运行模块等脚本名.py要执行的 Python 脚本绝对路径/相对路径[脚本参数]传递给 Python 脚本的参数脚本内可通过sys.argv获取 输出日志文件重定向标准输出stdout到指定文件默认生成nohup.out21将标准错误stderr重定向到标准输出最终写入同一个日志文件将进程放入后台运行终端可继续执行其他命令2. 最简示例执行test.py日志默认写入nohup.outnohuppython3 test.py3. 自定义日志文件推荐将日志写入test.log方便后续排查问题nohuppython3-utest.pytest.log21关键参数-u禁用 Python 输出缓冲保证日志实时写入文件否则日志可能延迟显示。4. 传递脚本参数如果脚本需要接收参数如test.py需传入--mode prod --port 8080nohuppython3-utest.py--modeprod--port8080test.log21脚本内可通过sys.argv或argparse解析参数。二、关键操作1. 查看后台运行的 Python 进程# 方法1查看所有后台进程含nohup启动的jobs-l# 方法2过滤Python进程更精准ps-ef|greppython3|greptest.py# 方法3仅显示进程IDPIDpgrep-ftest.py2. 终止后台运行的 Python 进程找到进程 PID 后用kill命令终止# 正常终止推荐允许程序清理资源kill[PID]# 强制终止程序无响应时使用kill-9[PID]示例# 先查PIDps-ef|greptest.py# 假设输出 PID 为 12345# 再终止kill123453. 查看实时日志# 实时跟踪日志输出类似 tail -ftail-ftest.log# 查看最后100行日志tail-n100test.log# 查看全部日志cattest.log三、进阶技巧1. 后台运行虚拟环境中的 Python如果脚本依赖虚拟环境需指定虚拟环境的 Python 解释器路径# 假设虚拟环境在 ~/venv 下nohup~/venv/bin/python3-utest.pytest.log212. 避免日志文件过大结合logrotate分割日志或直接限制日志大小示例日志超过 100MB 则覆盖nohuppython3-utest.py(tail-c100M)213. 开机自启以 systemd 为例如果需要脚本开机自动运行可创建 systemd 服务创建服务文件sudovim/etc/systemd/system/test.service写入内容[Unit] DescriptionPython Test Script Afternetwork.target [Service] Typesimple Userroot # 替换为实际运行用户 ExecStart/usr/bin/python3 -u /path/to/test.py # 替换为实际脚本路径 Restarton-failure # 程序崩溃时自动重启 StandardOutputappend:/path/to/test.log # 日志输出 StandardErrorappend:/path/to/test.log [Install] WantedBymulti-user.target启用并启动服务sudosystemctl daemon-reloadsudosystemctlenabletest.servicesudosystemctl start test.service四、常见问题日志无输出忘记加-u参数Python 缓冲输出导致日志延迟添加-u即可。日志文件权限不足检查文件所属用户和权限chmod 777 test.log临时测试。进程莫名终止脚本本身抛出未捕获的异常查看日志文件排查错误。系统资源不足内存/CPU 耗尽通过dmesg或top排查。终端关闭时仍发送了 SIGHUP 信号确认命令末尾加了。中文日志乱码在脚本开头设置编码importsys sys.stdout.reconfigure(encodingutf-8)sys.stderr.reconfigure(encodingutf-8)总结核心命令nohup python3 -u 脚本.py 日志文件 21 关键参数-u实时日志、21合并错误输出、后台运行运维技巧结合ps/kill管理进程、tail -f查看日志、systemd 实现开机自启。