计划任务_crontab

1. crontab原理和使用

Cron 实际上是两个独立的程序。Cron damon, 或者叫做cron ,crond 它是伴随系统一起启动的常驻程序

来检查是否cron 在系统上运行, 用ps 命令 和 grep 过滤所需内容:

ps -ef|grep cron 

root    387      1   0   Jun 29 ?     00:00:00 crond 

root  32304  20607   0   00:18 pts/0  00:00:00 grep cron 

进程 crond 每分钟激活一次,检查cron 文件列表,那里面记录着什么程序应该在什么时间来运行。如果有程序需要运行,它启动他们然后继续休眠,你不需要关系cron的运行机制,只需要知道它在运行,并且不停地轮询cron 任务列表。

The cron 列表文件 随系统的不同可能不同,但通常由下面的东西组成,每个用户的计划任务文件一般是放下面 :

在 /var/spool/cron 或者 /var/spool/cron/crontabs

这些文件是利用cron 的用户建立的,每一个(计划任务)文件使用了用户名字信息,你总能发现 一个root 文件 在 /var/spool/cron/root 。如果有一个叫jinx的用户使用了cron 那么一定存在一个 文件/var/spool/cron/jinx

ls -l /var/spool/cron 

-rw-------   1  root    root          3768 Jul 14  23:54  root 

-rw-------   1  root    group          207 Jul 15  22:18  jinx 

cron的另一部分是 表 编辑器, crontab ,它用来编辑 /var/spool/cron 目录中的文件。crontab 自己知道哪的文件需要修改,能让事情变的更简单。

crontab 辅助工具有三个选项: -l , -r , -e . 

-l 选项 列出当前 userid 文件中的 任务列表。

-r 选项 删除一个 cron 表文件

-e 编辑 文件

 也可直接写一个计划任务文件,然后crontab  文件名 形成计划任务.

test@hefu:~$ pwd
/home/test
test@hefu:~$ cat test_cront.cron 
* * * * *  /home/test/1.sh
test@hefu:~$ crontab  -l
no crontab for test
test@hefu:~$ crontab  test_cront.cron 
test@hefu:~$ crontab  -l
* * * * *  /home/test/1.sh

2.计划任务遇到的问题

  因为是在 普通用户下 没法编写 /etc/crontab 文件,所以给了setfacl -m u:ubuntu:rw /etc/cront.

导致了计划任务都没有执行. 说明这种方法不可行.

3. 普通用户执行crontab

参考:  普通用户无法使用crontab故障排除

4.使用 crontab -e 与 直接编辑 /etc/crontab 的区别

Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别:

方法1:

使用命令 crontab -e 然后直接编辑定时脚本。

这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本。

[root@localhost cron.d]# cd /var/spool/cron  
[root@localhost cron]# ll  
总用量 4  
-rw-------. 1 root root 52 12月  9 10:58 root  
[root@localhost cron]# pwd  
/var/spool/cron  
[root@localhost cron]# cat root   
30 03 * * * /root/automysqlbackup.sh  

方法2:

使用命令 vi /etc/crontab 编辑定时脚本。

如:

[root@localhost ~]# cat /etc/crontab                                                                                                                                                                        
SHELL=/bin/bash                                                                                                                                                                                             
PATH=/sbin:/bin:/usr/sbin:/usr/bin                                                                                                                                                                          
MAILTO=root                                                                                                                                                                                                 
HOME=/                                                                                                                                                                                                      
                                                                                                                                                                                                            
# run-parts                                                                                                                                                                                                 
30 * * * * root /usr/sbin/ntpdate 210.72.145.4

(系统级的)做系统级配置我们会直接配置 /etc/crontab

(用户级的)一般还是建议大家使用 crontab -e ,这样系统也会帮着检查我们配置的脚本语法。

猜你喜欢

转载自www.cnblogs.com/yitianyouyitian/p/9088590.html