在 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的时间长点更保险。

相关推荐
cxr8285 小时前
自动化知识工作AI代理的工程与产品实现
运维·人工智能·自动化
·云扬·5 小时前
从零开始搭 Linux 环境:VMware 下 CentOS 7 的安装与配置全流程(附图解)
linux·运维·centos
晓梦.7 小时前
IPSec 安全基础
服务器·网络·安全
btyzadt9 小时前
虚拟机蓝屏问题排查与解决
linux·运维·网络
小李独爱秋9 小时前
UNIX发展历史与核心技术解析
服务器·操作系统·unix
佩佩(@ 。 @)9 小时前
网络编程-创建TCP协议服务器
服务器·网络·tcp/ip
蓝黑202010 小时前
阿里云ECS服务器搭建ThinkPHP环境
服务器·阿里云·thinkphp
G_H_S_3_10 小时前
【网络运维】Shell 脚本编程:while 循环与 until 循环
linux·运维·网络·shell
张鱼小丸子10 小时前
MySQL企业级部署与高可用实战
运维·数据库·mysql·云原生·高可用·mha·组从复制
coderklaus10 小时前
Shell 基础知识
linux·macos·shell