crond定时备份

我想定时备份某一个文件,运行crontab -e,然后输入下面的内容:

51,52,53,54,55,56,57,58,59,1,2,3 * * * * rsync -a /home/peter/running/test.txt /home/peter/timing-backup/data_$(date +%T)

行首的备份时间点写了一长串主要是为了测试一下,看是否可以成功在每分钟都生成一个新的备份文件。

编辑器用的是nano,保存时提示保存文件为/tmp/crontab.730n1B/crontab

结果是,时间从09:50一直到10:01,timing-backup目录里没有生成任何文件。

我检查了一下systemctl status cron,显示是active(running)的状态。

我是不是哪里写得不对?或者,我应该查哪里?

我改一下位置看看~

那个临时目录是默认指定的,如果换 /var/spool/cron/目录,会提示没有权限;并且,会提示No modification made,我猜应该是不能指定目录。

管理员手册的相关章节说:
默认情况下,所有用户都可以运行计划任务。每个用户有他们自己的 crontab 其中记录了要调度的命令。可以通过运行 crontab -e 编辑(其内容存储在 /var/spool/cron/crontabs/user 文件中)。

你把命令rsync -a /home/peter/running/test.txt /home/peter/timing-backup/data_$(date +%T)写成脚本文件,使其可执行后再用执行脚本文件代替命令。保险起见可以加上一行

SHELL=/usr/bin/bash

设置 SHELL 环境变量。

我试了一下,还是没有生成备份文件~

环境变量设置或者不设置,我都测试了一下。

我在想会不会是创建任务的方法有问题~

用crontab -l命令是可以看到任务的。

另外,我直接修改了/etc/crontab文件,然后sudo systemctl restart cron,也没有效果; 且这个/etc/crontab是无法被crontab -l检测到的。

我用的是bullseye+gnome。

应该不是,因为文档上都是这样写的。或许应该换一种方法?
新建文件$HOME/script.sh:

#!/usr/bin/bash
rsync -a /home/peter/running/test.txt /home/peter/timing-backup/data_$(date +%T)

使其可执行:
chmod +x $HOME/script.sh
运行crontab -e,然后输入:

SHELL=/usr/bin/bash
* * * * * $HOME/script.sh

这种方法对我工作。

1 个赞

我按你的方法,果然可以了,生成了需要的备份文件~

:+1: