用Python的cru定时任务运行脚本没有输出怎么办?

我在路由器上想定时跑个 py 脚本
就用 cru 命令加了下定时任务,2 每隔 20 分钟跑下

cru a jdprice “*/20 * * * * python3 /opt/etc/jd_price.py”

这个脚本实际上就是启动后爬我设定的几个京东页面,抓价格后存盘到 /opt/etc/jd_price.json
然后脚本启动的时候也会载入 这个 json

可是问题来了

不使用 cru 定时命令 而直接运行 python3 /opt/etc/jd_price.py,我的 py 文件是能正确运行写配置文件的

而是用 cur 定时命令,这个 jd_price.json 不会被更新

有人知道为什么么。。。现在是在 python 脚本里面写 time.sleep(1200) 的一个 while 死循环,觉得好蠢。。。
用Python的cru定时任务运行脚本没有输出怎么办?


18 回复

一种办法解决不了,换另一个解决哪里蠢了。楼主加油,解决了 @一波


遇到cru定时任务没输出,先别慌,这事儿多半是环境变量和路径的问题。Linux的cron环境和咱们手动在终端里跑的环境不一样。

最直接的解决办法就是在你的Python脚本里,把输出重定向到日志文件。这样你就能看到到底发生了什么。

比如,你的cru任务行可以改成这样:

* * * * * /usr/bin/python3 /home/yourname/myscript.py >> /home/yourname/cron.log 2>&1

这里 >> 是追加输出,2>&1 是把错误输出也重定向到同一个文件。

如果还不行,那很可能是Python解释器或者模块的路径问题。在脚本的开头,可以加几行调试代码,把关键信息写到日志里:

import sys
import os

with open('/home/yourname/script_debug.log', 'a') as f:
    f.write(f"Python executable: {sys.executable}\n")
    f.write(f"Working directory: {os.getcwd()}\n")
    f.write(f"PYTHONPATH: {os.environ.get('PYTHONPATH', 'Not set')}\n")
    f.write(f"Path: {os.environ.get('PATH', 'Not set')}\n")

这样跑一次,你就能看到cron环境下的真实情况。

另外,确保你在cru里用的是Python解释器的绝对路径(像 /usr/bin/python3),别直接用 pythonpython3

总结一下:重点检查环境变量和用绝对路径。

路口问题吧

用的相对地址?换绝对地址

写这种定时任务,python3 都得写成绝对地址,算是个好习惯

哈哈哈,我正在写 jd_coupon.py

我遇到过工作目录的坑,但是是在 windows 下。
想把文件拖到脚本上进行处理,命令行状态下传参可以运行,实际拖拽文件就会报错(而且日志都没有)。
后来发现工作目录是某个系统目录 用户写不了。试试 chdir()什么的

py 本身支持定时任务

准备抢 那张 198-100 神券吧

给我妈买雀巢的中老年奶粉,淘宝最便宜也得 32,这回京东用完券 17 一袋,有多少我领多少

能说说吗

我路由器上内存少只有 256Mb,所以希望运行完 python 不希望 python 还驻留内存,所以才希望用路由器自身的定时任务

大佬好, 请问能帮忙抢一张吗? //我是喜欢跑步的

除了前两天领到了后来都没领到,一到领券的点网络就卡到爆,我在山大用的校园网难道学生也都卡点抢券?

py 本身支持定时任务是什么意思?求教

好的谢谢 ,另外请问这个神券在哪里领取?找不到入口了

现在没有了,只有 200-50

回到顶部