Photo by Unsplash
859 字
4 分钟
Debian时区设置与Crontab定时任务配置
Debian 时区设置与 Crontab 定时任务配置
服务器时区不对会导致日志时间混乱,定时任务则可以自动化重复性操作。这两个配置是 Linux 基础中的基础。
修改时区为北京时间
方法:使用 timedatectl(推荐)
# 查看当前时区timedatectl status
# 列出所有可用时区timedatectl list-timezones | grep Shanghai
# 设置为北京时间(Asia/Shanghai)sudo timedatectl set-timezone Asia/Shanghai
# 验证timedatectl status输出示例:
Local time: Fri 2026-03-14 23:30:00 CST Universal time: Fri 2026-03-14 15:30:00 UTC RTC time: Fri 2026-03-14 15:30:00 Time zone: Asia/Shanghai (CST, +0800)旧版系统如果是 Debian 8 或更早版本,使用交互式菜单:
Terminal window sudo dpkg-reconfigure tzdata# 依次选择 Asia -> Shanghai
Crontab 定时任务
编辑定时任务
# 编辑当前用户的 crontabcrontab -e
# 编辑系统级 crontab(需要root)sudo crontab -e时间格式
* * * * * 命令│ │ │ │ ││ │ │ │ └── 星期 (0-7, 0和7都是周日)│ │ │ └──── 月份 (1-12)│ │ └────── 日期 (1-31)│ └──────── 小时 (0-23)└────────── 分钟 (0-59)常用示例
# 每天凌晨4点执行备份0 4 * * * /home/user/backup.sh
# 每5分钟检查一次服务*/5 * * * * /home/user/check_service.sh
# 每周一早上8点发送报告0 8 * * 1 /home/user/send_report.sh
# 每月1号凌晨3点清理日志0 3 1 * * /home/user/clean_logs.sh
# 工作日(周一到周五)每2小时执行0 */2 * * 1-5 /home/user/workday_task.sh输出重定向
将任务的输出记录到日志文件:
# 标准输出和错误输出都记录0 4 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
# 只记录错误0 4 * * * /home/user/backup.sh >> /var/log/backup.log 2>> /var/log/backup.error.log环境变量
crontab 默认的环境变量很少,建议在脚本开头设置:
SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binHOME=/home/user
# 然后才是任务0 4 * * * /home/user/backup.sh查看和管理定时任务
# 查看当前用户的任务crontab -l
# 删除所有任务(慎用)crontab -r
# 查看系统级定时任务cat /etc/crontab
# 查看定时任务日志(Ubuntu/Debian)grep CRON /var/log/syslog
# 查看定时任务日志(CentOS/RHEL)grep CRON /var/log/cron特殊字符串
@reboot # 系统启动时执行@yearly # 每年1月1日 0:00 (等同于 0 0 1 1 *)@monthly # 每月1日 0:00 (等同于 0 0 1 * *)@weekly # 每周日 0:00 (等同于 0 0 * * 0)@daily # 每天 0:00 (等同于 0 0 * * *)@hourly # 每小时 0分 (等同于 0 * * * *)使用示例:
# 系统启动时启动服务@reboot /home/user/start_service.sh
# 每天午夜执行@daily /home/user/daily_task.sh完整配置示例
设置服务器时区为北京时间,并添加每日备份任务:
# 1. 设置时区sudo timedatectl set-timezone Asia/Shanghai
# 2. 编辑 crontabcrontab -e
# 3. 添加以下内容SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 每天凌晨4点执行备份,记录日志0 4 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
# 每10分钟检查代理服务状态*/10 * * * * /home/user/check_proxy.sh >> /var/log/proxy_check.log 2>&1常见问题
问题1:任务没有执行
- 检查脚本是否有执行权限:
chmod +x script.sh - 检查日志:
grep CRON /var/log/syslog - 检查路径是否使用绝对路径
问题2:时区设置后时间还是不对
- 安装 NTP 同步时间:
sudo apt install ntp - 或手动同步:
sudo ntpdate time.windows.com
问题3:任务执行了但没有效果
- 环境变量问题,在脚本开头 export 需要的变量
- 使用绝对路径,不要用相对路径
参考链接
- timedatectl 手册:https://man7.org/linux/man-pages/man1/timedatectl.1.html
- crontab 手册:https://man7.org/linux/man-pages/man5/crontab.5.html
- Crontab Guru:https://crontab.guru/
Debian时区设置与Crontab定时任务配置
https://im.awsl.app/posts/system-ops/045-debian-timezone-crontab/