zoukankan      html  css  js  c++  java
  • ubuntu中执行定时任务crontab

    今天研究了下ubuntu里的crontab内置指令。这是设置定时执行脚本任务的指令,我先测试了下最基础的执行。

    第一次使用crontab 时,会出现

    no crontab for root - using an empty one

      “Select a editor ......”下面有几个选项,就是叫你选择编辑器。(选vim)就可以了,我选的第三个。

     但是如果你选错了,就可能会遇到点麻烦,没有办法正常编辑,crontab -e。 怎么办?

     执行这个命令:select-editor  (针对crontab的一个命令), 可以让你重新选一次。

    文件位置一般在/var/spool/cron/下,如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab 文件丢失;默认情况下,crontab中执行的日志写在/var/log下。

    执行crontab  -e 进入编辑页面,增加需要计划执行的sh文件

    我写的是*/1 * * * * echo "hello"   ,通过这条指令写入cron.log中。重新启动crontab 任务 。并在/var/log/cron.log中查看运行情况

    下面稍微解释下crontab中每行的含义。crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:

    分钟          0 - 59

    小时          0 - 23

    天              1 - 31

    月              1 - 12

    星期          0 - 6       0表示星期天

    除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:

    星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)

    逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟

    斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别

                      */2 可以看成是能被2整除的任意值。

    注意:

    • 1.Ubuntu 下先判断cron是否启动 #ps aux |cron 重启:sudo /etc/init.d/cron restart 重新载入配置:sudo /etc/init.d/cron reload
    • ubuntu 下需要先设置cron运行日志存放路径才能查看crontab的日志:sudo vi /etc/rsyslog.d/50-default.conf 去掉cron 前面的# 保存。
    • 重启rsyslog服务:sudo service rsyslog restart 重启cron服务:sudo service cron restart
    • 停止cron服务:sudo service cron stop

    再顺带一提,不喜欢命令行的童鞋可以去 Ubuntu软件中心 下一个 计划任务 程序。在软件中心中搜索 schedule 就可以搜到。它是一个GUI的程序,做的还蛮傻瓜化的。不过好像没办法设置成使用root用户运行任务。而且,对于要ssl到服务器上进行操作的童鞋来说,命令行还是最好(唯一)的工具。

    因为我目前就用到这些知识,所以对cron也没有更多了解。想了解Ubuntu下的cron的童鞋,可以去看看Ubuntu官方的这篇 CronHowTo ,个人觉得讲的还是蛮详细的。

    基本的指令:

    参数 : 
    crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数 
    来指定使用那个文字编辑器(比如说 setenv VISUAL joe) 
    crontab -r : 删除目前的时程表 
    crontab -l : 列出目前的时程表 
    crontab file [-u user]-用指定的文件替代目前的crontab。 
    时程表的格式如下 : 
    f1 f2 f3 f4 f5 program 
    其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执 
    行的程序。 
    当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推 
    当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推 
    当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推 
    当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推 
    使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。 
    例子 : 
    #每天早上7点执行一次 /bin/ls : 
    0 7 * * * /bin/ls 
    在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup : 
    0 6-12/3 * 12 * /usr/bin/backup 
    周一到周五每天下午 5:00 寄一封信给 alex@domain.name : 
    0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata 
    每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" 
    20 0-23/2 * * * echo "haha" 
    注意 : 
    当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之 
    后加上 > /dev/null 2>&1 即可 
    例子2 : 
    #每天早上6点10分 
    10 6 * * * date 
    #每两个小时 
    0 */2 * * * date 
    #晚上11点到早上8点之间每两个小时,早上8点 
    0 23-7/2,8 * * * date 
    #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    0 11 4 * mon-wed date 
    #1月份日早上4点 
    0 4 1 jan * date 
    范例 
    $crontab -l 列出用户目前的crontab.

  • 相关阅读:
    关于SQL异地备份的方法(转)
    为VS2008添加OLE/COM 对象查看器
    Microsoft.SqlServer.Smo无法加载SqlServer.Management.Smo.Agent.JobBaseCollection解决方法(转)
    Python3+Pygame实现的射击游戏,很流畅,有音效
    Python项目第1集
    2021年Python3快速入门视频上线了,免费学!!!走起
    亲自动手实现Python+pygame中国象棋游戏
    人机对战版五子棋
    学生信息管理系统(Django入门级)
    Python3+pygame实现的flappy bird游戏,代码完整,还有音乐
  • 原文地址:https://www.cnblogs.com/dion-90/p/8479502.html
Copyright © 2011-2022 走看看