分享

Linux之定时任务

 开炮走火 2018-06-21

该文章是自己在学习linux定时任务的时候,做的相关笔记,主要是在网上的找的一些资料加上自己的一些测试的内容。目前自己只是刚开始了解,都是比较基础的内容,仅记录自己的学习过程。
1./etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
一般默认打开是如下内容:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .—————- minute (0 - 59)
# | .————- hour (0 - 23)
# | | .———- day of month (1 - 31)
# | | | .——- month (1 - 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 - 6) (Sunday=0 or 7) OR
#sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

可以改为如下(仅供参考):
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个账号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行 /etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了
我看了一下我自己的,目前/etc/cron.hourly这写文件里面是空,这样设置了之后,大家只需要把自己要执行的文件放在对应的文件夹就可以了

2./etc/cron.deny 和 /etc/cron.allow 文件
a.如果两个文件都不存在,则只有root用户才能使用crontab命令。
b.如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
c.如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
d.如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

3.cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业
 /sbin/service crond start //启动服务
 /sbin/service crond stop //关闭服务
 /sbin/service crond restart //重启服务
 /sbin/service crond reload //重新载入配置
 /sbin/service crond status //查看服务状态

4.每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的
a.一般情况下这里面的文件只有root用户可以查看
b.至于某个用户在执行定时任务的时候,这里面才会有该用户想的文件,比如用户名peter创建的定时任务,你看见的内容入下:
peter root

注意:/etc/crontab 这里的crontab文件是针对系统的任务
而/var/spool/cron下边的crontab文件(名字不叫crontab,一般为用户名)是针对某个用户的

5.在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下:
  minute hour day-of-month month-of-year day-of-week commands
分 小时 日 月 星期 命令
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)

记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,如每2分钟:*/2
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字

每个字段代表的含义如下:
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 命令。 ]

50 7 * * * root run-parts /etc/cron.daily 每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
[ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

6.新增定时任务:
1).在任何文件目录皆可命令行输入: crontab -e
这时候回会有一个可编辑的文件的打开
在里面添加定时任务,wq保存退出即可
eg:定时执行php脚本
a.创建crontab.php,在文件中连接了数据库,每分钟网数据库中插入时间戳
b.需要把crontab.php变成可执行的脚本文件在命令行下,脚本所在目录chmod +x crontab.php(不确定是不是一定要变,我没有变也可以执行)
c.你的crontab.php文件中一定要在开始处加上: #!/usr/local/php/bin/php -q(php文件目录为自己的),(不确定是不是一定要变,我没有变也可以执行)
d.命令行输入: crontab -e
e.在crontab -e打开的文件中写:
/1 * * * /opt/lampp/bin/php /home/peter/app/crontab.php //每分钟执行一次crontab脚本
这样就可以了。
注意:有时你需要确定一下你的crontab服务是否开启,没有开启话,你需要开启才能生效

2).直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务:
/1 * * * peter /opt/lampp/bin/php /home/peter/app/crontab.php //每分钟执行一次crontab脚本
注意:1.一般需要管理员权限才能修改该文件
2.需要在时间和命令行之间添加用户名才可以执行
eg:# * * * * * user-name command to be executed

7.操作定时任务
1)查看定时任务
crontab -l //列出当前的所有调度任务
crontab -l -u peter //列出用户peter的所有调度任务

2)删除定时任务
crontab -r //删除所有任务调度工作.如果要删除其中一个,就用crontab -e在文件中去修改

3)编辑定时任务
crontab -e //编辑定时任务

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多