在 Linux 使用 cron 定时执行任务的注意事项

在 Linux 下想通过 cron 设置自动镜像备份文件,遇到很多挫折,最后成功,记录下几点注意事项。

尝试过程:

系统默认自带 cron,执行 crontab -e 添加开机启动任务。类似如下语句。

@reboot rsync -a --delete /home/user/dir1 /home/user/backup

重启后发现没有效果。

按照有的网友指导的方法,可能是 cron 不适合直接执行非内置的命令,我又写了个脚本,通过脚本来运行。脚本内容如下。

#! /usr/bin/bash

rsync -a --delete /home/user/dir1 /home/user/backup

重启后还是没有效果。

按照有的网友指导的方法,可能 cron 执行的太快,有些环境还没初始化好,我在脚本里又加上了 sleep,运行前暂停20秒钟(10秒钟都不行)。

#! /usr/bin/bash

sleep 20

rsync -a --delete /home/user/dir1 /home/user/backup

重启后仍然没有效果。

后来在这篇文章的启发下,终于解决了问题。

检查 cron 是否在 Linux 上运行的 4 种方法 (linux-console.net)

排查1:

检查 cron 守护进程是否正常运行

sudo systemctl status cron

结果显示正常

排查2:

查看 cron 日志(发挥了关键作用)

grep CRON /var/log/syslog (默认是syslog,如果设置了 cron 单独日志,也可能是 cron)

通过日志能够确定 cron 在开机时确实执行了。

通过观察执行语句,我发现中文都显示成 \351\225 这样的格式,一度担心是不是路径文件名中有中文造成的问题,但经过测试,并非这个原因。

排查3:

按照参考文章里的方法3,证明 cron 在一般定时的情况下是可以正常运行的,但就是开机还不行。

检查 cron 是否在 Linux 上运行的 4 种方法 (linux-console.net)

排查4:

再次查看 cron 日志,这次才发现,@reboot 后面指定的路径是 /home/user \351\225......,中间少了一个 / ,多了一个空格,重新修改路径,但开机还是不行。

排查5:

把 rsync 改成 echo 命令,就可以正常运行,说明触发脚本执行没有问题,于是我尝试把之前去掉的 sleep 又加进来,这次终于正常运行了。

总结:

1.确保 cron 正常安装,正常运行。

2.使用 crontab -e 添加定时任务时,如果使用的是非内置命令,需要使用脚本,要确保脚本路径准确,具有执行权限。

3.使用非内置命令时,脚本里要添加 sleep 语句,延迟执行,sleep的时间长点更保险。

相关推荐
Canmag 兴隆磁性10 小时前
中大型钕铁硼产品的磁通测量与自动分选:一条产线自动化的工程实现思路
运维·学习·自动化·永磁材料
福建佰胜张工11 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
xuefeiniao12 小时前
PHP2Shell漏洞修复
运维·服务器·php
水饺编程13 小时前
第2章:Linux 基础,切换到超级用户
linux·c语言·汇编
便利店102413 小时前
系统活动一抓留存!深入 Linux C/C++ 调试工具之 sysdig
linux·运维·服务器·sysdig
g3voip14 小时前
工业防水电话到底怎么选?隧道、管廊与码头的需求差异
服务器·网络·信息与通信·ip
qetfw14 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
智能运维指南14 小时前
企业 IT 运维自动化平台怎么选?从场景匹配到 POC 验证的完整评估框架
运维·自动化·自动化运维·嘉为蓝鲸
其实防守也摸鱼15 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
.Bryce.15 小时前
从强化学习到Agentic RL:让Agent在“干活“中自己变聪明
服务器·网络·agent·rag·agentic rl