本文目录导读:

在Crontab中设置时区,主要有以下几种方法:
修改系统默认时区(最推荐)
# 查看当前时区 timedatectl # 设置时区为上海(中国标准时间) sudo timedatectl set-timezone Asia/Shanghai # 或者手动设置 sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 验证 date
在Crontab中指定时区环境变量
在 crontab 文件开头添加 CRON_TZ 变量:
# 编辑 crontab crontab -e # 在文件开头添加时区设置 CRON_TZ=Asia/Shanghai # 然后写定时任务 0 9 * * * /path/to/script.sh # 这会在上海时间9:00执行
在脚本内转换时区
如果不想修改系统时区,可以在脚本内部处理:
# crontab 设置(UTC时间) 0 1 * * * /path/to/script.sh # script.sh 内容 #!/bin/bash export TZ=Asia/Shanghai # 或者使用 date 命令转换 CURRENT_HOUR=$(TZ=Asia/Shanghai date +%H) echo "当前北京时间: $(TZ=Asia/Shanghai date)"
常用时区设置
常见时区设置示例:
# 中国标准时间 CRON_TZ=Asia/Shanghai # 美国东部时间 CRON_TZ=America/New_York # 英国时间 CRON_TZ=Europe/London # 日本时间 CRON_TZ=Asia/Tokyo # 协调世界时 CRON_TZ=UTC
验证时区是否生效
# 查看 cron 进程的环境变量 grep TZ /proc/$(pgrep -x cron)/environ 2>/dev/null | tr '\0' '\n' # 或者测试 echo "当前cron使用的时区: $(TZ=Asia/Shanghai date)"
完整示例
# crontab -e 内容示例 # 设置时区为上海 CRON_TZ=Asia/Shanghai # 每天早上8点执行备份 0 8 * * * /usr/local/bin/backup.sh # 每周一中午12点发送报告 0 12 * * 1 /usr/local/bin/send_report.sh # 每月1号凌晨3点清理日志 0 3 1 * * /usr/local/bin/clean_logs.sh
注意事项
- 系统重启后检查:系统重启后,时区设置可能会被重置
- 容器环境:在Docker容器中,需要在Dockerfile或启动时设置时区
- 不同系统差异:
- CentOS/RHEL:
/etc/localtime - Ubuntu/Debian:
timedatectl - Alpine: 需要安装
tzdata包
- CentOS/RHEL:
最推荐的方式是 修改系统默认时区,这样所有程序(包括Crontab)都会使用统一的时区,避免混淆。