Systemd服务无法执行Python定时脚本,求助实现开机自启与后台运行
解决Python定时脚本无法通过Systemd运行的问题
我来帮你一步步排查并解决这个问题,分脚本修复和Systemd服务配置两部分来处理:
一、先修复Python脚本的几个问题
你的脚本里有几个小问题会导致运行失败,先调整一下:
- 语法错误:
f.close(...这里多了三个点,而且用with语句打开文件的话,不需要手动调用close(),with会自动帮你处理文件关闭。 - 缺少定时循环:
schedule库需要启动循环才能持续检测定时任务,你的脚本里没有这部分代码,运行后会直接退出。 - 相对路径隐患:如果用相对路径
company.txt,Systemd运行时的工作目录可能不是脚本所在目录,导致文件找不到,建议用绝对路径。
修复后的完整脚本示例:
import schedule import time from datetime import datetime def job(): print("Scheduling is Working...") createfile() def createfile(): company = "Example file" # 👇 替换成你实际想要保存文件的绝对路径,比如/home/frank/company.txt file_path = "/home/your_username/company.txt" with open(file_path, 'w+') as f: # 可以把时间也写入文件,方便查看创建记录 content = f"{company}\nCreated at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" f.write(content) print(f"File Created on: {time.ctime(time.time())}") # 配置每隔1分钟执行一次任务 schedule.every(1).minutes.do(job) # 启动定时任务循环,保持脚本运行 while True: schedule.run_pending() time.sleep(1)
二、配置Systemd服务实现后台运行+开机自启
接下来创建Systemd服务文件,让脚本能在后台稳定运行,并且系统重启后自动恢复:
1. 创建服务文件
用sudo权限编辑一个服务文件,比如:
sudo nano /etc/systemd/system/file-creator.service
2. 写入服务配置内容
把下面的内容粘贴进去,注意替换所有带your_username和脚本路径的占位符:
[Unit] Description=定时创建文本文件的Python服务 After=network.target # 不需要网络的话可以去掉这行 [Service] User=your_username # 替换成你的系统用户名,尽量不要用root运行 WorkingDirectory=/home/your_username/scripts/ # 替换成你的Python脚本所在的绝对目录 ExecStart=/usr/bin/python3 /home/your_username/scripts/your_script.py # 替换成脚本的绝对路径 Restart=always # 脚本意外退出时自动重启 RestartSec=5 # 重启间隔5秒 # 把日志输出到指定文件,方便排查问题 StandardOutput=append:/home/your_username/file-creator.log StandardError=append:/home/your_username/file-creator.log [Install] WantedBy=multi-user.target
3. 启动并启用服务
执行以下命令完成配置:
- 重新加载Systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start file-creator.service - 设置开机自启:
sudo systemctl enable file-creator.service
4. 验证服务状态
- 查看服务是否正常运行:
sudo systemctl status file-creator.service - 查看日志确认任务执行情况:
tail -f /home/your_username/file-creator.log
三、常见问题排查
如果服务还是无法运行,可以从这几个方向检查:
- 权限问题:确保脚本、文件保存目录、日志文件所在目录有对应用户的读写权限。
- Python路径错误:用
which python3查看你的Python3实际路径,替换到ExecStart里。 - 脚本路径错误:一定要用绝对路径,Systemd的默认工作目录是
/,相对路径大概率会找不到文件。
内容的提问来源于stack exchange,提问作者frank hk
相关产品推荐
相关产品推荐

