我想使用linux的crontab每天对crontab内容备份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想使用linux的crontab每天对crontab内容备份相关的知识,希望对你有一定的参考价值。

我想使用linux的crontab每天对crontab内容备份,
在crontab中配置了如下内容:

0 1 * * * (cd /home/new/cron_bak/; crontab -l > cron.`date +%Y%m%d`)
发现不起作用,觉得可能是无法识别 crontab -l,于是换成以下内容

0 1 * * * (cd /home/new/cron_bak/; /usr/bin/crontab -l > cron.`date +%Y%m%d`)
结果还是不起作用。

但我手动在shell下执行括号里的内容,均可生效。哪位高手知道其中的奥秘啊,谢谢大家~

crontab -l的内容实际都在 /var/spool/cron/ 目录下的文件里面
其实用tar或者cp备份就够了

另外crontab里面的命令最好用绝对路径,否则要声明一下环境变量,否则很容易命令找不到的。
1、任务调度设置文件的写法
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
每个字段代表的含义如下:
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选
字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
举例如下:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]
2、新增调度任务可用两种方法:
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
参考技术A 你的crontab总变化吗?为什么要每天备份这个呢?

另外crontab -l的内容实际都在 /var/spool/cron/ 目录下的文件里面
其实用tar或者cp备份就够了

另外crontab里面的命令最好用绝对路径,否则要声明一下环境变量,否则很容易命令找不到的。本回答被提问者采纳

Mac下使用crontab来实现定时任务

说明:

1、Linux和Mac下操作crontab都是一致的

2、配置文件都在/etc/crontab下,如果没有就创建。

3、测试发现直接使用crontab -e命令创建的定时任务是放在临时文件夹的,重启会删除,并且与/etc/crontab文件无关联。

实际操作:

查看 crontab 是否启动

sudo launchctl list | grep cron

检查需要的文件

$  LaunchAgents  ll /etc/crontab
ls: /etc/crontab: No such file or directory  #表示没有这个文件,需要创建一个

创建文件

sudo touch /etc/crontab 

crontab的参数
-u user:用来设定某个用户的crontab服务;
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

eg: /1 * * * /bin/date >> /User/Username(你的用户名)/time.txt表示每分钟输出当前时间到time.txt上.


如果出现以下问题

crontab: no crontab for hayek - using an empty one
crontab: "/usr/bin/vi" exited with status 1
方法1:EDITOR=vim crontab -e 直接编辑,以后直接crontab -e直接打开就行。
方法2:export EDITOR=vim
方法3:向cron进程提交一个crontab文件之前,首先要设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的. profile文件,在其中加入这样一行:
EDITOR=vi; export EDITOR
crontab的文件格式

* 第1列分钟0~59
* 第2列小时0~23(0表示子夜)
* 第3列日1~31
* 第4列月1~12
* 第5列星期0~7(0和7表示星期天)
* 第6列要运行的命令

crontab服务的重启关闭,开启

Mac系统下

sudo /usr/sbin/cron start
sudo /usr/sbin/cron restart
sudo /usr/sbin/cron stop
Ubuntu:

sudo /etc/init.d/cron start
sudo /etc/init.d/cron stop
sudo /etc/init.d/cron restart

参考:

http://blog.csdn.net/zhenhanhong_tony/article/details/52658055

http://blog.csdn.net/zmzwll1314/article/details/52389967

http://blog.csdn.net/biyongyao/article/details/77791238(以上内容转自此篇文章

http://blog.csdn.net/meixuesong/article/details/27481883

http://blog.csdn.net/lgt633744/article/details/45932035(另类的定时任务实现

以上是关于我想使用linux的crontab每天对crontab内容备份的主要内容,如果未能解决你的问题,请参考以下文章

linux crond任务调度

Linux定时任务调度

Mac下使用crontab来实现定时任务

Mac下使用crontab来实现定时任务

linux Crontab定时备份项目案例

Linux定时任务cron详解