用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定时任务运行脚本没有输出怎么办?
一种办法解决不了,换另一个解决哪里蠢了。楼主加油,解决了 @一波
遇到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),别直接用 python 或 python3。
总结一下:重点检查环境变量和用绝对路径。
用的相对地址?换绝对地址
写这种定时任务,python3 都得写成绝对地址,算是个好习惯
哈哈哈,我正在写 jd_coupon.py
我遇到过工作目录的坑,但是是在 windows 下。
想把文件拖到脚本上进行处理,命令行状态下传参可以运行,实际拖拽文件就会报错(而且日志都没有)。
后来发现工作目录是某个系统目录 用户写不了。试试 chdir()什么的
准备抢 那张 198-100 神券吧
给我妈买雀巢的中老年奶粉,淘宝最便宜也得 32,这回京东用完券 17 一袋,有多少我领多少
能说说吗
我路由器上内存少只有 256Mb,所以希望运行完 python 不希望 python 还驻留内存,所以才希望用路由器自身的定时任务
大佬好, 请问能帮忙抢一张吗? //我是喜欢跑步的
除了前两天领到了后来都没领到,一到领券的点网络就卡到爆,我在山大用的校园网难道学生也都卡点抢券?
py 本身支持定时任务是什么意思?求教
好的谢谢 ,另外请问这个神券在哪里领取?找不到入口了
现在没有了,只有 200-50


