Termux定时任务

  1. 安装 Cronie 和 Termux Services
    Termux 使用 cronie 作为 cron 的实现,并且推荐使用 termux-services 来管理后台服务(如 cron 守护进程 crond)。
    在 Termux 中运行以下命令来安装它们:
    1
    2
    3
    pkg update
    pkg upgrade
    pkg install cronie termux-services

  1. 确保脚本存在且有执行权限
  • 给脚本添加可执行权限:
    示例:
    1
    chmod +x ~/.termux/tasker/test.sh
  • 建议: 在你的脚本文件的第一行,最好加上指定用哪个解释器执行,例如:
    1
    #!/data/data/com.termux/files/usr/bin/bash

  1. 启用并启动 Cron 服务
    使用 termux-services 来启用并立即启动 crond 服务:
    1
    2
    sv-enable crond
    sv up crond
    你可以使用:sv status crond 来检查服务是否正在运行(应该显示 run: crond…)。
    1
    sv status crond

  1. 编辑 Crontab 添加定时任务
  • 运行 crontab -e 命令来编辑当前用户的 crontab 文件。第一次运行时,它可能会让你选择一个编辑器(如 nano 或 vim),选择你熟悉的即可(nano 对新手通常更友好)。
    1
    crontab -e
  • 示例在打开的编辑器中,添加任务:
    1
    */20 * * * * bash $HOME/.termux/tasker/test.sh
    • */20: 代表“每隔 20 分钟”(在每小时的第 0, 20, 40 分钟执行)。
    • * * * *: 代表“每小时、每天、每月、每周的每一天”。
    • bash: 指定使用 bash 来执行脚本(即使脚本内部有解释器,显式指定通常更可靠)。
    • $HOME/.termux/tasker/test.sh: 要执行的脚本路径。在 crontab 中使用 $HOME 通常比 ~ 更可靠,它会被正确扩展为你的主目录。
  • (推荐)添加日志记录: 为了方便调试,最好将脚本的输出重定向到一个日志文件。修改上面的行如下:
    示例:
    1
    */20 * * * * bash $HOME/.termux/tasker/test.sh >> $HOME/.termux/tasker/test.log 2>&1
    • >> $HOME/.termux/tasker/test.log: 将脚本的标准输出 (stdout) 追加到 test.log 文件。
    • 2>&1: 将标准错误输出 (stderr) 也重定向到标准输出,这样错误信息也会被记录到同一个日志文件中。
  • 保存并退出编辑器:
    • 如果是 nano:按 Ctrl + X,然后按 Y 确认保存,最后按 Enter 确认文件名。
    • 如果是 vim:按 Esc 键,然后输入 :wq 并按 Enter。

  1. 验证 Crontab
    你可以使用 crontab -l 命令来查看当前已保存的定时任务列表,确保你添加的行是正确的。
    1
    crontab -l

重要提示:保持 Termux 在后台运行

  • Cron 任务需要 crond 守护进程持续运行。而 crond 又依赖于 Termux 本身在后台运行。Android 系统的电池优化可能会强制关闭后台的 Termux 进程,导致定时任务无法执行。
  • 解决方法:
    • 获取 Wake Lock: 在你准备让 Termux 在后台运行定时任务之前,在 Termux 中运行 termux-wake-lock 命令。这会持有一个唤醒锁,阻止设备在 Termux 运行时进入深度睡眠,并减少被系统杀死的概率。你需要保持这个持有唤醒锁的 Termux 会话(或者说,至少保持 Termux 应用本身不被完全杀死)。
    • 禁用电池优化: 在手机的系统设置 -> 应用管理 -> Termux -> 电池用量(或类似名称)中,将电池优化设置为“不受限制”或“允许后台活动”。具体路径因 Android 版本和厂商而异。

Termux定时任务
https://wumingmr.github.io/2025/04/28/Termux定时任务/
作者
MR.无名
发布于
2025年4月28日
许可协议