精华内容
下载资源
问答
  • crontab 脚本默认是root用户运行,如果是普通用户(非root), 比如leag,而定时任务又是root用户执行的,,会导致生成的日志文件属于root,进而导致leag用户无权限写入日志报错。下面记录一下,使用普通用户执行定时...

    crontab 脚本默认是root用户运行,如果是普通用户(非root), 比如leag ,而定时任务又是root用户执行的,,会导致生成的日志文件属于root,进而导致leag用户无权限写入日志报错。下面记录一下,使用普通用户执行定时任务的方法。

     

    1、crontab 常用的命令

    crontab -u //指定某个用户的cron服务 
    
    crontab -l //列出某个用户的cron服务的详细内容 
    
    crontab -r //删除某个用户的cron服务 
    
    crontab -e //编辑某个用户的cron服务

     

    2、查看crontab 定时任务的方法:

    cat /etc/crontab

    root@localhost:/home/ap/LeagView/Log/python>cat /etc/crontab 
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- 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

     

    3、Linux 下crond定时任务使用普通用户执行脚本的方法

    crontab -e默认创建的用户是root用户,创建普通用户的定时执行债务,执行下面命令:

    # 如果要创建普通leag用户的定时任务:
    crontab -u leag -e //编辑leag 用户的命令 
    
    # 使用下面命令查看leag用户下的定时任务内容:
    crontab -u leag -l //查看leag 用户的命令列表

     

    还有一种方法,就是将原来的root的定时任务的名字改为普通用户leag的名字,重启crond服务,定时任务就能以普通用户leag运行了

     

    展开全文
  • 在网上查说普通用户下需要加/root/路径,否则会报错: /bin/sh: /home/hadoopadmin/document/movie.sh: bin/bash: bad interpreter: No such file or directory 加了/root就报错Permossion denied。我从普通用户下cd...
    1. 在网上查说普通用户下需要加/root/路径,否则会报错:
      /bin/sh: /home/hadoopadmin/document/movie.sh: bin/bash: bad interpreter: No such file or directory
    2. 加了/root就报错Permossion denied。我从普通用户下cd /root也是显示permossion denied。说明普通用户下不能直接cd到root用户下。
    3. vi /home/hadoopadmin/document/movie.sh 可以查看文件内容
    4. /home/hadoopadmin/document/movie.sh 显示 bad interpreter: No such file or directory
    5. sh /home/hadoopadmin/document/movie.sh 可以正常运行 吼吼吼吼那就往定时任务里写sh这个啦!
    展开全文
  • 为什么用linux定时任务,而不是在项目加定时任务呢?原因就是防止因为各种原因项目崩溃。。所以就用了更加稳定的linux定时任务(我是这么想的( ^_^ ))。 crontab 格式 * * * * * XXX  分 时 天 月 星期 ...

    转载一篇,来源作者==》老鼠抗刀,满街找猫

    为什么用linux定时任务,而不是在项目加定时任务呢?原因就是防止因为各种原因项目崩溃。。所以就用了更加稳定的linux定时任务(我是这么想的( ^_^ ))。

     

    crontab 格式     *  *  *  *  *      XXX

             分    时     天    月    星期   命令

    符号      “*”代表取值范围内的数字,
                  “/”代表”每”,
                  “-”代表从某个数字到某个数字,
                  “,”分开几个离散的数字 

    例子

        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 命令。 ]

     

    现在来介绍我的具体操作步骤(包括编写shell脚本 并执行编写的sql文件)

        打开linux终端>进入cat(我自己创建的)目录>创建crontab文件夹 并进入> 执行命令 crontab -e进入编辑状态编写crontab表达式 1 * * * * /cat/crontab/sbin.sh(每天凌晨1点执行total.sh脚本)>

    Ctrl+X 建退出>Yes(保存)>回车> crontab -l (如果能看到你刚才保存的crontab,就成功了~~)

    (。。。浪费时间的原因是我的保存退出和博客上那些写的不一样。。)往下看☟☟☟☟

     

    例子:

    假设当前用户是root,要建立root用户的定时任务

    crontab -e

    选择编辑器,编辑定时任务(这里假设是编辑器是vi)

    按i进入编辑模式

    1 * * * * /cat/crontab/sbin.sh

    按esc退出编辑模式进入普通模式,输入:x或:wq保存退出

     

    上几张图~~

    简单的执行sql的shell脚本

     
    注意事项
    新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
     
    下面再附一篇介绍:

     

    ************************************************************************************

     

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
     
    /sbin/service crond start //启动服务
    /sbin/service crond stop //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload //重新载入配置

     

    你也可以将这个服务在系统启动的时候自动启动:

     

    在/etc/rc.d/rc.local这个脚本的末尾加上:
    /sbin/service crond start

     

    现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:

     

    1.直接用crontab命令编辑

     

    cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

     

    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

     

    crontab -l //列出某个用户cron服务的详细内容

     

    crontab -r //删除没个用户的cron服务

     

    crontab -e //编辑某个用户的cron服务

     

     
    比如说root查看自己的cron设置:crontab -u root -l

     

    再例如,root想删除fred的cron设置:crontab -u fred -r

     

    在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

     

    进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

     

    这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:

     

    分钟 (0-59)
    小時(0-23)
    日期(1-31)
    月份(1-12)
    星期(0-6) //0代表星期天

     

        除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题:

     

    每天早上6点

     

    -----------------

     

    0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

     

    每两个小时
    -----------------

     

    0 */2 * * * echo "Have a break now." >> /tmp/test.txt

     

    晚上11点到早上8点之间每两个小时,早上八点
    -----------------
    0 23-7/28 * * * echo "Have a good dream:)" >> /tmp/test.txt
    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
    -----------------
    0 11 4 * 1-3 command line
    1月1日早上4点
    -----------------
    0 4 1 1 * command line
        每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

     

    2.编辑/etc/crontab 文件配置cron
        cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

     

    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"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

     

    ************************************************************************************

    转载于:https://www.cnblogs.com/ccppjy/p/11167704.html

    展开全文
  • linux 定时执行shell脚本 定时任务

    千次阅读 2015-12-14 17:32:05
    在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘.   在oracle 中可以利用dbms_job包定时执行pl/sql、sql...

    在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成

    本文讲述crontab具体用法,以供备忘.

     

    在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成

    利用crontab来定时执行任务大致有如下三步:

    1、编写shell脚本

    2、利用crontab加入到定时任务队列

    3、查看作业完成情况

    一、如何建立shell脚本

    Linux下有很多不同的shell,但我们通常使用bash(bourne again shell)进行编程,因为bash是免费的并且很容易使用

    程序必须以下面的行开始(必须方在文件的第一行):

    #! /bin/sh

    符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。

    当编辑好脚本时,要想执行脚本,必须使脚本可以执行

    下面的命令,可以使脚本可以执行

    chmod +x filename

    然后可以输入./filename来执行脚本。

    注:在shell编程时,#符号表示注释,只该行结束为止。在编写程序时,最好使用注释。

    变量

    shell下所有变量都以字符串表示,变量不需要声明,直接使用。直接对变量进行赋值

    A="hello world"

    取出变量用$符号,如:

    #! /bin/sh

    A="hello world"

    echo "A is:"

    echo $A

    执行该脚本输出结果如下:

    A is :

    hello world

    shell 命令和流程控制

    1)unix命令

    在shell中可以使用任意的unix命令,但这里介绍一些更常用的unix命令

    echo ''this is a example" :打印输出到屏幕

    ls:列出文件列表

    cp sourcefile destinationfile :拷贝文件

    2)概念:管道,重定向和backtick

    这些不是系统命令,但他们经常使用,很重要的

    管道 | 将一个命令的输出作为另外一个命令的输入

    grep -qa compat | more

    重定向:将命令的结果输出到文件,而不是标准输出(屏幕)

    〉写入文件并覆盖旧文件

    〉〉输出追加到文件的尾部,保留旧文件。

    3)流程控制

    if ... ; then

    ...

    else if ...;then

    ...

    else

    ...

    fi

    通常情况下,可以通过测试命令来对条件进行测试,比如可以比较字符串,判断文件是否存在及是否有执行权限等等

    通常用“ [ ] “来表示条件测试,注意这里空格很重要,要确保方括号空格

    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等

     

    实例  一般编程步骤

    任何优秀的脚本都应该有帮助和输入参数,并且写一个伪脚本framework.sh,该脚本包含了大多数脚本都需要的框架结构。

    是个非常不错的注意。这时候,我们编写脚本时只需要执行cp命令即可

    cp framework.sh myscript

    然后插入自己需要的函数就可以了

    调试

    最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。

      shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:

    sh -x strangescript

      这将执行该脚本并显示所有变量的值。

      shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:

    sh -n your_script

      这将返回所有语法错误。

    Redhat linux AS 3 下定时执行任务 

    二、cron调度进程

    c r o n是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做 
    c r o n t a b的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个c r o n t a b文件 
    来保存调度信息。可以使用它运行任意一个s h e l l脚本或某个命令,每小时运行一次,或一周 
    三次,这完全取决于你。每一个用户都可以有自己的c r o n t a b文件,但在一个较大的系统中, 
    系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过 
    c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。 
    3.1.1 crontab的域 
    为了能够在特定的时间运行作业,需要了解c r o n t a b文件每个条目中各个域的意义和格式。 
    下面就是这些域: 
    第1列分钟1~5 9 
    第2列小时1~2 3(0表示子夜) 
    第3列日1~3 1 
    第4列月1~1 2 
    第5列星期0~6(0表示星期天) 
    第6列要运行的命令 
      
    crontab的范例格式: 
    下面是c r o n t a b的格式: 
    分< >时< >日< >月< >星期< >要运行的命令 
    其中< >表示空格。 
    C r o n t a b文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位 
    于星期的后面。 
    在这些域中,可以用横杠-来表示一个时间范围,例如你希望星期一至星期五运行某个作 
    业,那么可以在星期域使用1 - 5来表示。还可以在这些域中使用逗号“,”,例如你希望星期一 
    和星期四运行某个作业,只需要使用1 , 4来表示。可以用星号*来表示连续的时间段。如果你 
    对某个表示时间的域没有特别的限定,也应该在该域填入*。该文件的每一个条目必须含有5 
    个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用#来表示。 
      
    crontab条目举例 
    这里有c r o n t a b文件条目的一些例子: 
    30 21* * * /apps/bin/cleanup.sh 
    上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。 
    45 4 1,10,22 * * /apps/bin/backup.sh 
    上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。 
    10 1 * * 6,0 /bin/find -name "core" -exec rm {} ; 
    上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。 
    0,30 18-23 * * * /apps/bin/dbcheck.sh 
    上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。 
    0 23 * * 6 /apps/bin/qtrend.sh 
    上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h。 
      
    你可能已经注意到上面的例子中,每个命令都给出了绝对路径。当使用c r o n t a b运行s h e l l 
    脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。记住,既然是用户向c r o n 
    提交了这些作业,就要向c r o n提供所需的全部环境。不要假定c r o n知道所需要的特殊环境,它 
    其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量,除了一些自动 
    设置的全局变量。 
      
    命令形式: 
    c r o n t a b命令的一般形式为: 
    Crontab [-u user] -e -l -r 
    其中: 
    -u 用户名。 
    -e 编辑c r o n t a b文件。 
    -l 列出c r o n t a b文件中的内容。 
    -r 删除c r o n t a b文件。 
    如果使用自己的名字登录,就不用使用- u选项,因为在执行c r o n t a b命令时,该命令能够 
    知道当前的用户 
      
    建一个新的crontab文件 
      
    在考虑向c r o n进程提交一个c r o n t a b文件之前,首先要做的一件事情就是设置环境变量 
    E D I TO R。c r o n进程根据它来确定使用哪个编辑器编辑c r o n t a b文件。9 9 %的U N I X和L I N U X用 
    户都使用v i,如果你也是这样,那么你就编辑$ H O M E目录下的. p r o f i l e文件,在其中加入这样 
    一行: 
    EDITOR=vi; export EDITOR 
    然后保存并退出。 
    不妨创建一个名为< u s e r > c r o n的文件,其中< u s e r >是用户名,例如, j a m e s c r o n。在该文件中加入如下的内容。 
    #。。。。这里是解释的话 
    0,15,30,45 18-06 * * * /bin/echo 'time'>/dev/console 
      
    保存并退出。确信前面5个域用空格分隔。 
    在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起, 
    从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用t t y 1来表 
    示控制台,可以根据实际情况对上面的例子进行相应的修改。 
    为了提交你刚刚创建的c r o n t a b文件,可以把这个新创建的文件作为c r o n命令的参数: 
    $ crontab jamescron 
    现在该文件已经提交给c r o n进程,它将每隔1 5分钟运行一次。 
    同时,新创建文件的一个副本已经被放在/ v a r / s p o o l / c r o n目录中,文件名就是用户名(即, 
    james)。 
      
    列出crontab文件: 
      
    为了列出c r o n t a b文件,可以用: 
    你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对c r o n t a b文件做一备 
    份: 
    $ crontab -l > $HOME/mycron 
    这样,一旦不小心误删了c r o n t a b文件,可以用上一节所讲述的方法迅速恢复。 
      
    编辑crontab文件: 
      
    如果希望添加、删除或编辑c r o n t a b文件中的条目,而E D I TO R环境变量又设置为v i,那么 
    就可以用v i来编辑c r o n t a b文件,相应的命令为: 
    $ crontab -e 
    可以像使用v i编辑其他任何文件那样修改c r o n t a b文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。 
    保存并退出。最好在c r o n t a b文件的每一个条目之上加入一条注释,这样就可以知道 
    它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。 
    可以使用前面讲过的crontab -l命令列出它的全部信息 
      
    为了删除c r o n t a b文件,可以用: 
    $ crontab -r

    三,可以利用重定向命令来输出运行结果

    > ,>>

    四、具体实例

    sh脚本文件:test.sh

    #! /bin/sh

    su - oracle << EOF  

    sqlplus test/test@test @"test.sql"

    sql脚本文件:test.sql

    insert into test_tb values (sysdate);

    crontab文件:

    0,15,30,45 * * * * /apps/bin/test.sh


    ===============================================================================================


    Linux中,周期执行的任务一般由cron这个守护进程来处理  ps -ef | grep cron 

    cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。

    cron的配置文件称为“crontab”,是“cron table”的简写。

    一、 cron在3个地方查找配置文件(设置shell脚本):

    1、/var/spool/cron/yanggang 这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对应的文件就是/var/spool/cron/tom

     yanggang@barry$ sudo ls -l /var/spool/cron/(或有时是 /var/spool/cron/crontabs/)
    -rw------- 1 root     crontab 1071 2011-09-19 17:20 root

    -rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang

    一般一个用户最多只有一个crontab文件(如:root, yanggang等),其对应日志在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里


    2、/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 
    # |  |  |  |  |
    # *  *  *  *  *  command to be executed

    例如:

    */5 * * * * root /usr/libexec/atrun

    minute:代表一小时内的第几分,范围 0-59。 
    hour:代表一天中的第几小时,范围 0-23。 
    mday:代表一个月中的第几天,范围 1-31。 
    month:代表一年中第几个月,范围 1-12。 
    wday:代表星期几,范围 0-7 (0及7都是星期天)。 
    who:要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。 
    command:所要执行的指令。 


    3、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。



    二、 权限
    crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
    用法如下: 
    1、如果两个文件都不存在,则只有root用户才能使用crontab命令。 
    2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。 
    3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。 
    4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
    以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。 


    AIX 中 普通用户默认都有 crontab 权限,如果要限制用户使用 crontab ,就需要编辑/var/adm/cron/cron.deny 
    HP-UNIX 中默认普通用户没得crontab 权限 ,要想放开普通用户的crontab 权限可以编


    三、 创建cron脚本

    第一步:写cron脚本文件,命名为crontest.cron。
    15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt  表示,每隔15分钟,执行打印一次命令 
    第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定 
    第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本



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

    例如: 使用sudo停止与启动服务

    yanggang@barry$sudo service cron stop
    cron stop/waiting
    yanggang@barry$ sudo service cron start
    cron start/running, process 7502



    五、 crontab用法 
    crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格,用户把需要执行的命令序列放到crontab文件中以获得执行。
    每个用户都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接创建或者直接修改,该crontab文件是通过crontab -e命令创建的

    在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) 

    除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字

    "/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

    -l 在标准输出上显示当前的crontab。 

    -r 删除当前的crontab文件。 

    -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。

    当结束编辑离开时,编辑后的文件将自动安装。 



    几个例子: 
    每天早上6点 
    0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

    每两个小时 
    0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

    晚上11点到早上8点之间每两个小时和早上八点 
    0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    0 11 4 * 1-3 command line

    1月1日早上4点 
    0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 

    每小时(第一分钟)执行/etc/cron.hourly内的脚本
    01 * * * * root run-parts /etc/cron.hourly


    每天(凌晨4:02)执行/etc/cron.daily内的脚本

    02 4 * * * root run-parts /etc/cron.daily 


    每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本

    22 4 * * 0 root run-parts /etc/cron.weekly 


    每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本 

    42 4 1 * * root run-parts /etc/cron.monthly 


    注意:  "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。   


    每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。 
    5,15,25,35,45,55 16,17,18 * * * command

    每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
    00 15 * *1,3,5 shutdown -r +5

    每小时的10分,40分执行用户目录下的innd/bbslin这个指令: 
    10,40 * * * * innd/bbslink 

    每小时的1分执行用户目录下的bin/account这个指令: 
    1 * * * * bin/account

    每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔): 
    203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)  

    每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。 

    12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt 


    六、几个问题

    crond 进程没有运行

    1. 启动crond进程

    /etc/init.d/crond start


    2. 开机自启动crond进程

    chkconfig crond on


    crontab 编辑:
    输入编辑命令: crontab -e

    # m h  dom mon dow   command
    SHELL=/bin/bash
    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh

    Ctrl + O (写入)——》enter键(保存文件名)——》Ctrl + X(退出) 

    输入查看命令: crontab -l

    # m h  dom mon dow   command
    SHELL=/bin/bash
    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh
    建议使用此方式

    语法错误:

    <code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 0, 102);">Syntax</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> error</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 102, 0);">:</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(0, 136, 0);">"("</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> unexpected  </span></code>

    参见: LINUX - BASH Syntax Error

    或者,crontab -e 时指定shell解释器(sh):SHELL=/bin/bash(请参见上面 crontab编辑 示例)


    路径错误:

    在 /var/spool/crontab/yanggang 中,添加了如下命令,在日志文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路径

    30 * * * *  /home/barry/top800/top10/top10_fruits/top10_all.sh

    30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

    这是因为你在crontab中使用了绝对路径执行脚本 top10_all.sh,因此在脚本 top10_all.sh 中引用的其它脚本也都需要使用绝对路径,才能被crontab找到并执行

    如何避免绝对路径复杂的设置呢,如上文 六、几个问题  所示,采用如下格式:

    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh建议使用此方式,先进入该目录,然后在执行脚本;否则,执行脚本中的其它脚本都需要加绝对路径











    展开全文
  • 普通用户执行定时任务(crontab)

    千次阅读 2020-03-11 14:23:53
    普通用户执行定时任务(crontab) (用root权限执行下面命令) 1、以普通用户test1开启一个定时任务 crontab -e -u test1 2、定时任务执行shell脚本,usertest.sh如下,顺便打印执行时间: #!/bin/bash declare...
  • Cron一般Cron是指Vixie Cron,虽然后来出来好多改进版本,或者变种,如Fcron, bcron, incron, Anacroncron软件在后台运行并且经常检查 /etc/crontab 文件,这是一个普通的文本文件,里面列出了要执行任务每行都含有...
  • 为什么用linux定时任务,而不是在项目加定时任务呢?原因就是防止因为各种原因项目崩溃。。所以就用了更加稳定的linux定时任务(我是这么想的( ^_^ ))。 起初我感觉很简单,以为顶多半小时就搞定了,,,结...
  • 1、首先创建一个定时任务:每分钟向屏幕输出"Hello world!"。 有两种实现方式: 1)输入crontab -e命令,根据提示直接在当前cron task文本最后面插入如下命令(记得回车): * * * * * echo "Hello world!...
  • linux用户自定义定时任务执行

    千次阅读 2017-09-20 19:14:14
    使用管理员root用户添加定时执行任务 crontab -e */1 * * * * /root/check_nginx.sh >>/root/check_nginx.log 还可以直接更改文件自行添加  vi /etc/crontab */1 * * * * /root/check_nginx.sh >>/root...
  • 安装crontab:使用命令:yum install crontabs**在普通用户执行**2.创建一个新的crontab文件,并写入执行的命令(每分钟向hello文件中写I am kk's crontab)使用命令:vim cronTest内容:* * * * * echo "I am ....
  • 授权普通用户Linux crontab定时任务

    千次阅读 2019-03-21 09:41:35
    项目需求,在Linux下做个定时任务,而且是普通用户下可控的。网上找资料,方向没找对,就暂时用root用户定时任务。最后别人提示用sudo,才有了这篇文章。 下面就说一下方法: 1.创建任务(普通用户) crontab-e...
  • 在linux下用crontab启动定时脚本,放到crontab中死活没反应,这是可能的原因: ...如果日志中有执行记录可能是脚本没有执行权限,此时要赋予执行权限,如 chmod +x xxx.sh 就是给xxx.sh这个脚本赋予执...
  •  /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行脚本,这里要注意一下bin/sh 是指运行 脚本的命令 后面一段时指脚本存放的路径   2. 查看该用户下的crontab服务是否创建成功...
  • crond 定时任务普通用户注意事项:1.因为是sudo权限,所以普通用户使用sudo vi编辑脚本以后是root属主,属组2.可以将目标目录chown nice.nice /aaa/bbb -R。root vi 编辑以后还是root属主,属组。crontab -e 编辑...
  • CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动 1.关于mysql? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于...
  • 普通用户使用sudo命令编写一个脚本脚本内容为:设置定时任务,每隔5分钟,输出“当前用户名_时间”到/tmp/output.txt中,时间格式为: xxxx-yy-zz aa:bb:cc。 注意:整个题目答案只有一个脚本文件,且脚本要分别...
  • 命令格式:at 时间 (回车后会换行输入待执行的命令,命令输入完毕按ctrl+d会建立定时任务或延时任务) 定时任务:at 指定时间 举例:at 01:31 在1:31时候执行 延时任务:at 延时时间 举例:at now+1min 一...
  • 我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现。但这两种方法都不太可靠,不稳定。我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务。 下面...
  • 参考 https://blog.csdn.net/weixin_41712808/article/details/81567328 但是在第五步,程序或脚本框里,我填写了需要运行脚本,而非 python.exe,否则没法运行定时任务
  • linux定时运行命令脚本——crontab
  •  表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号。 /dev/null 2>&1  把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,...
  • Crontab定时执行PHP脚本

    2013-11-29 23:57:37
    我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现。但这两种方法都不太可靠,不稳定。我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务 下面介绍...
  • 因为是在gbase用户运行脚本,所以先su - gbase,再crontab -e查看编辑当前用户定时任务,也可以在/var/spool/cron/gbase文件中查看编辑gbase用户定时任务。 一开始使用8 * * * * /bin/bash /tmp/gcheck_...
  • 有哪位大佬会这个,用shell脚本,将定时备份数据库的shell脚本任务,添加crontab定时任务里去执行,也就是两个shell脚本备份数据库; 定时备份数据库的脚本以写好,另一个脚本不会。 还有查看其它博客好多命令不懂...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,165
精华内容 6,866
关键字:

普通用户定时任务执行脚本