vps定时任务crontab
vps定时任务crontab
在 Linux VPS 上,最稳定、最标准的定时运行工具是 Crontab (Cron)。它就像是你的“系统闹钟”。
由于你的 Python 代码中使用了相对路径来读取 CSV 和 JSON 文件(例如 CSV_FILE = "jlpt_n1_practical_cards.csv"),我们在配置定时任务时必须先进入该目录,否则程序会因为找不到文件而报错。
请按以下步骤操作:
第一步:确认文件路径
首先,你需要知道你的 app.py 到底放在哪。在终端中进入你的文件夹并输入 pwd:
cd ~/myproject # 假设你的代码在这里,或者是 line_jp 文件夹
pwd
假设输出是: /home/ubuntu/line_jp (请记住这个路径,下面会用到)
同时确认 python3 的路径(通常是 /usr/bin/python3):
which python3
第二步:编辑定时任务表
输入以下命令打开编辑器:
crontab -e
(如果是第一次运行,它会让你选编辑器,选 1 用 nano 即可)
第三步:写入定时规则
假设你想在每天的 早上 8 点、中午 1 点、晚上 8 点 发送。 请在文件最后一行添加以下内容(注意修改路径为你实际的路径):
0 8,13,20 * * * cd /home/ubuntu/line_jp && /usr/bin/python3 app.py >> run.log 2>&1
这条命令的详细含义:
0 8,13,20 * * *: 代表“每天的 8:00, 13:00, 20:00”触发。cd /home/ubuntu/line_jp: 关键步骤! 先切换到代码所在文件夹。- 如果不加这句,Python 运行时的“当前目录”默认是用户主目录,会导致
app.py里的load_cards("jlpt_n1_practical_cards.csv")报FileNotFoundError错误。
- 如果不加这句,Python 运行时的“当前目录”默认是用户主目录,会导致
&&: 前面的命令(cd)成功后,再执行后面的命令。/usr/bin/python3 app.py: 运行你的程序。>> run.log 2>&1: 强烈建议加上。- 把程序打印的
print(debug) 和报错信息都写入run.log文件里。 - 如果脚本没跑通,你可以去看看这个日志文件,一下就知道原因了。
- 把程序打印的
第四步:保存并退出
- 按
Ctrl + O-> 回车 (保存) - 按
Ctrl + X(退出)
提示 crontab: installing new crontab 就说明成功了。
⚠️ 重要提示:注意时区!
VPS 的服务器时间通常是 UTC (格林威治时间),而你可能是在 中国/日本时间 (UTC+8 或 UTC+9)。
检查服务器时间的方法: 在终端输入:
date
如果显示 UTC $\rightarrow$ 你需要做数学题,或者修改服务器时区。
修改服务器时区为日本时间(最推荐,一劳永逸):在终端执行这一行命令:
sudo timedatectl set-timezone Asia/Tokyo
再次输入 date 确认变成了 JST,然后上面的 Crontab 代码就会按你的预期工作了!
如何测试?
你可以先设置一个“1分钟后”的时间来测试一下是否生效。
比如现在是 12:00,你可以写 1 12 * * * ...,等一分钟,看看 run.log 里面有没有输出 [DEBUG] 选中卡片索引... 之类的内容。
设置好后,它就会全自动为你工作了!