广告

Linux 下运行 Python 脚本的多种方法:命令行执行、定时任务与守护进程的实战指南

1. 命令行执行:在 Linux 下直接运行 Python 脚本的实战方法

本章节围绕在 Linux 下运行 Python 脚本的多种方法,覆盖命令行执行、定时任务与守护进程的实战指南,帮助开发与运维快速落地。

1.1 环境准备与版本管理

在 Linux 环境中运行 Python 脚本,首要任务是确认 Python 版本和解释器路径,以及为项目创建隔离的运行环境。使用虚拟环境可以避免系统依赖冲突,确保版本一致性。

为避免全局污染,推荐使用 venv 或 conda 来管理依赖。示例:创建一个独立的虚拟环境并安装依赖。以下是一个常见做法的演示。

# 以一个简单的 Python 脚本为例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sysdef main():name = sys.argv[1] if len(sys.argv) > 1 else "world"print(f"Hello, {name}!")if __name__ == "__main__":main()

在上面的脚本中,第一行使用 shebang 指定解释器,确保在任何工作目录都能像可执行程序一样运行。为了让脚本具备执行权限,执行以下命令:

chmod +x hello.py

随后就可以直接从命令行执行脚本,或者显式使用解释器执行,依赖场景灵活切换。常见的执行方式包括:直接运行带参数运行,以及通过管道/重定向保存输出。

1.2 直接命令行运行与参数传递

直接在命令行运行时,你可以通过传递位置参数或使用 argparse 解析选项,实现不同输入的处理。示例演示了如何接收命令行参数并产生输出。

# 直接用 Python 解释器执行
python3 hello.py
python3 hello.py Alice

如果要提升脚本的可执行性,可以利用环境变量和输出定向功能。以下命令将标准输出和错误输出重定向到日志文件,便于排错。

python3 hello.py Bob > output.log 2>&1

此外,输出日志也有助于持续监控与告警,确保生产环境中的作业可追溯。此处的要点是 正确管理输出和错误流,以及确保脚本在无交互模式下稳定运行。

2. 定时任务:利用 cron 实现定时执行的实战指南

本章节围绕在 Linux 下运行 Python 脚本的多种方法展开,重点放在定时任务的设置与运维实践上,帮助你实现可靠的定时执行。

2.1 Cron 基础与入门

在 Linux 中,定时执行 Python 脚本常用的是 cron,它通过 crontab 配置定时任务。将任务写入当前用户的 crontab 即可实现定时触发。

要点包括 crontab -e、crontab -l、以及环境变量 PATH 的设置,确保 cron 能找到 Python 解释器和脚本。下面给出一个基础示例,说明如何设置每天凌晨执行一次。

# 每天凌晨2点执行脚本
0 2 * * * /usr/bin/python3 /path/to/script.py >> /var/log/script.log 2>&1

为了避免在 cron 环境中找不到系统路径,建议在 crontab 文件头部明确设定 SHELL 与 PATH,以及在 ExecStart 执行环境中统一变量。

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2.2 实战排错与日志管理

实际场景中,定时任务的稳定性常常取决于日志和错误处理。通过将输出写入日志并在日志中包含时间戳,可以快速定位问题,避免消失在系统日志中

排错要点包括查看 crontab 任务、确认权限、以及确保 Python 虚拟环境或依赖已就绪。以下示例演示如何把脚本的输出追加到日志

0 2 * * * /usr/bin/python3 /path/to/script.py >> /var/log/script.log 2>&1
crontab -l

3. 守护进程:将 Python 脚本变为长期运行的服务

本章节围绕在 Linux 下运行 Python 脚本的多种方法展开,核心聚焦将脚本变为长期运行的服务,从而实现稳定守护。

3.1 使用 systemd 创建服务

要让 Python 脚本在系统启动后持续运行,systemd 服务单元是最常用的方案,它提供重启策略、日志汇聚和统一的管理接口。

Linux 下运行 Python 脚本的多种方法:命令行执行、定时任务与守护进程的实战指南

创建一个简单的 systemd 单元文件,定义 ExecStart、Restart、User、WorkingDirectory 等字段,可实现稳定的守护进程行为。

# /etc/systemd/system/my_python_service.service
[Unit]
Description=My Python Daemon
After=network.target[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/python3 /home/ubuntu/app/script.py
Restart=on-failure
RestartSec=5s
Environment=ENV=production[Install]
WantedBy=multi-user.target

3.2 使用进程管理器:Supervisor/PM2 类工具

如果你偏好对单个进程以外的多个服务进行统一的管理,Supervisor 是一个轻量级的进程管理工具,它可以自动重启、集中日志和提供简单的控制命令。

配置文件通常采用 INI 风格,定义要执行的命令、日志路径以及重启策略。下面给出一个简化示例。

[program:my_script]
command=/usr/bin/python3 /home/ubuntu/app/script.py
autostart=true
autorestart=true
autoclose=true
stderr_logfile=/var/log/my_script.err.log
stdout_logfile=/var/log/my_script.out.log

3.3 直接使用 nohup 与后台运行的替代方案

在一些简单场景中,nohup、screen 或 tmux 可以实现快速的后台执行和会话恢复,但需要自行处理日志轮换与进程管理。

nohup python3 /home/ubuntu/app/script.py > /var/log/script.log 2>&1 &

广告

后端开发标签