Skip to content

Linux-crontab定时执行任务

1. crontab 表项

  • Crontab 是 Linux 系统中的一个任务定时执行的工具,它允许用户在指定时间间隔内运行命令或脚本。它通常用于执行系统维护任务或定期备份数据等。
scss
*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of the week (0 - 6) (Sunday = 0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of the month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

[!cite] 每个时间参数可以指定一个值、一组值、连续的值或者通配符。

  • 例如,* 表示该参数所有可能的值都符合条件,例如 * * * * * 表示每分钟执行一次命令。
  • 如果想要指定多个值,可以使用逗号分隔 ,例如 0,15,30,45 * * * * 表示每小时的 0、15、30、45 分钟执行一次命令。
  • 如果想要指定连续的一段值,可以使用短横线 -,例如 10-20 * * * * 表示每小时从 10 到 20 分钟之间每分钟执行一次命令。

2. crontab 执行定时任务

  • 以定时执行访问 openAI 为例,需要定时访问 API, 以免账号被风控,那么,bash 脚本如下
shell
#!/bin/bash

# set url
API_URL="https://api.openai.com/v1/organizations"
TOKEN="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"

# 使用curl命令访问OpenAI账号
current_dir="/Users/albert/auto_script/vis_gpt/"
log_file=${current_dir}gpt_history.log

curl -s -H "Authorization: Bearer $TOKEN" $API_URL >> ${log_file}
echo "访问时间:$(date)" >> ${log_file}
echo "------------------------------" >> ${log_file}

# 打印访问日志
openai_log_file=${current_dir}openai.log
echo "OpenAI账号已访问 $(date)" >> ${openai_log_file}
  • 注意,必须使用绝对路径

  • crontab -e 进行编辑,比如希望每过 8 个小时执行一次

shell
0 */8 * * * /path/to/helloworld.sh

3. 查看 crontab 的现有表项

shell
crontab -l

4. 一个容易忽视的问题

  • crontab 只认识绝对路径,相对路径是不管用的