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

这条命令的详细含义:

  1. 0 8,13,20 * * *: 代表“每天的 8:00, 13:00, 20:00”触发。
  2. cd /home/ubuntu/line_jp: 关键步骤! 先切换到代码所在文件夹。
    • 如果不加这句,Python 运行时的“当前目录”默认是用户主目录,会导致 app.py 里的 load_cards("jlpt_n1_practical_cards.csv")FileNotFoundError 错误。
  3. &&: 前面的命令(cd)成功后,再执行后面的命令。
  4. /usr/bin/python3 app.py: 运行你的程序。
  5. >> 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] 选中卡片索引... 之类的内容。

设置好后,它就会全自动为你工作了!