计划任务_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
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 ,这样系统也会帮着检查我们配置的脚本语法。