搜尋
首頁運維linux運維Linux怎麼定時執行任務
Linux怎麼定時執行任務May 13, 2023 pm 07:01 PM
linux

    1 教學

    1.1 安裝crontabs

    yum install contabs  #通过yum安装
    systemctl enable crond  #设置开机启动
    systemctl start crond   #启动

    1.2 檢視crontab服務的狀態:

    service crond status

    Linux怎麼定時執行任務

    1.3 查看crontab的日誌資訊

    tail -f /var/log/cron  #crontab的日志信息放在/var/log文件夹中
    cat  /vat/log/cron

    Linux怎麼定時執行任務

    在crontab定時執行腳本的過程中,可能會有文件權限的問題,例如:

    Linux怎麼定時執行任務

    這個時候,需要給定時任務執行的腳本一個可執行的權限,修改權限的指令如下:

    chmod 777 /home/centos/sh/test.sh  #给所有权限

    1.4 設定定時任務

    crontab的定時任務檔案放在/etc/crontab檔案中,直接使用vim修改即可:

    Linux怎麼定時執行任務

    /etc/crontab檔案預設內容如下,其中也解釋了每個符號代表什麼意思:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=HOME=/
    # run-parts
    51 * * * * root run-parts /etc/cron.hourly
    24 7 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

    前四行是用來設定crond任務運行的環境變量,第一行SHELL變數指定了系統要使用哪個shell,這裡是bash,第二行PATH變數指定了系統執行指令的路徑,第三行MAILTO變數指定了crond的任務執行資訊將透過電子郵件發送給root用戶,如果MAILTO變數的值為空,則表示不發送任務執行資訊給用戶,第四行的HOME變數指定了在執行命令或腳本時使用的主目錄。第六至九行所表示的含義將在下一個小節詳細講述。

    在以上各个字段中,还可以使用以下特殊字符:
    星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
    文件:
    /etc/cron.deny
    说明:
    该文件中所列用户不允许使用crontab命令
    
    文件:
    /etc/cron.allow
    说明:
    该文件中所列用户允许使用crontab命令
    
    文件:
    /var/spool/cron/
    说明:
    所有用户crontab文件存放的目录,以用户名命名
    
    crontab文件的含义:
    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
    minute hour day month week command
    
    其中:
    minute: 表示分钟,可以是从0到59之间的任何整数。
    hour:表示小时,可以是从0到23之间的任何整数。
    day:表示日期,可以是从1到31之间的任何整数。
    month:表示月份,可以是从1到12之间的任何整数。
    week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    Linux怎麼定時執行任務

    • 第一個位置:分鐘(0-59)

    • 第二個位置:小時(0-23)

    • 第三個位置:天(1-31)

    • 第四個位置:月(1- 12)

    • 第五個位置:星期(0-6)

    • 第六個位置:使用者名稱

    • #第七個位置:需要定時執行的腳本或命令

    (1)修改定時任務:
    crontab -e  #该命令等同于  vim /etc/crontab
    (2)查看定時任務
    crontab -l  #该命令等同于 cat /etc/crontab

    1.5 crontab指令詳解

    1.5.1 指令格式
    crontab [-u user] file
    crontab [-u user] [ -e | -l | -r ]
    1.5.2 指令功能

    透過crontab 指令,我們可以在固定的間隔時間執行指定的系統指令或shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、週及以上的任意組合。這個指令非常設合週期性的日誌分析或資料備份等工作。

    1.5.3 指令參數
    • -u user:用來設定某個使用者的crontab服務,例如,「-u ixdba 」表示設定ixdba用戶的crontab服務,此參數一般有root用戶來執行。

    • file:file是指令檔的名字,表示將file做為crontab的任務清單檔案並載入crontab。如果在命令列中沒有指定這個文件,crontab指令將接受標準輸入(鍵盤)上鍵入的命令,並將它們載入crontab。

    • -e:編輯某個使用者的crontab檔案內容。如果不指定用戶,則表示編輯目前用戶的crontab檔案。

    • -l:顯示某個用戶的crontab檔案內容,如果不指定用戶,則表示顯示目前用戶的crontab檔案內容。

    • -r:從/var/spool/cron目錄中刪除某個用戶的crontab文件,如果不指定用戶,則預設刪除目前用戶的crontab文件。

    • -i:在刪除使用者的crontab檔案時給予確認提示。

    1.5.4 常用方法

    建立一個新的crontab檔案

    在考慮向cron行程提交一個crontab檔案之前,首先要做的一件事情就是設定環境變數EDITOR。 cron程序根據它來決定要使用哪個編輯器來編輯 crontab檔。 99%的UNIX和LINUX使用者都使用vi,如果你也是這樣,那麼你就編輯$ HOME目錄下的.profile文件,在其 中加入這樣一行:

    EDITOR=vi; export EDITOR

    然後儲存並退出。不妨建立一個名為cron的文件,其中是用戶名,例如, davecron。在該文件中加入如下的內容。

    # (put your own initials here)echo the date to the console every
    # 15minutes between 6pm and 6am
    0,15,30,45 18-06 * /bin/echo ‘date' > /dev/console

    儲存並退出。確信前面5個域用空格分隔。

    在 上面的範例中,系統將每隔15分鐘向控制台輸出一次目前時間。如果系統崩潰或掛起,從最後顯示的時間就可以一眼看出系統是什麼時間停止運作的。在有些 系統中,用tty1來表示控制台,可以根據實際情況對上面的例子做相應的修改。為了提交你剛剛建立的crontab文件,可以把這個新建立的文件當作cron指令的參數:

    $ crontab davecron
    • 现在该文件已经提交给cron进程,它将每隔15分钟运行一次。

      同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

    • 列出crontab文件

      为了列出crontab文件,可以用:

    $ crontab -l
    0,15,30,45,18-06 * * * /bin/echo`date`> dev/tty1

    你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份:

    $ crontab -l > $HOME/mycron
    • 这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

    • 编辑crontab文件

      如果希望添加、删除或编辑crontab文件中的条目,而E D I TO R环境变量又设置为vi,那么就可以用vi来编辑crontab文件,相应的命令为:

    $ crontab -e

    可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。

    我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
    30 3 1,7,14,21,26 /bin/find -name “core' -exec rm {} \;

    现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。

    现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

    $ crontab -l
    # (crondave installed on Tue May 4 13:07:43 1999)
    # DT:ech the date to the console every 30 minites
    0,15,30,45 18-06 * * * /bin/echo`date`> /dev/tty1
    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
    30 3 1,7,14,21,26 * * /bin/find -name “core' -exec rm {} \;

    删除crontab文件

    要删除crontab文件,可以用:

    $ crontab -r

    恢复丢失的crontab文件

    如果不小心误删了crontab文件,假设你在自己的$HOME目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/,其中是用户名。如果由于权限问题无法完成拷贝,可以用:

    $ crontab

    其中,是你在$HOME目录中副本的文件名。

    我建议你在自己的$HOME目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。

    有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按,否则你将丢失crontab文件。

    2 案例

    (1)每5秒执行一次任务

    */1 * * * * /bin/date >>/tmp/date.txt
    */1 * * * * sleep 5  && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 10 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 15 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 20 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 25 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 30 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 35 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 40 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 45 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 50 && /bin/date >>/tmp/date.txt
    */1 * * * * sleep 55 && /bin/date >>/tmp/date.txt

    (2)更多案例

    实例1:每1分钟执行一次command
    命令:
    * * * * * command
    
    实例2:每小时的第3和第15分钟执行
    命令:
    3,15 * * * * command
    
    实例3:在上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 * * * command
    
    实例4:每隔两天的上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 */2 * * command
    
    实例5:每个星期一的上午8点到11点的第3和第15分钟执行
    命令:
    3,15 8-11 * * 1 command
    
    实例6:每晚的21:30重启smb
    命令:
    30 21 * * * /etc/init.d/smb restart
    
    实例7:每月1、10、22日的4 : 45重启smb
    命令:
    45 4 1,10,22 * * /etc/init.d/smb restart
    
    实例8:每周六、周日的1 : 10重启smb
    命令:
    10 1 * * 6,0 /etc/init.d/smb restart
    
    实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
    命令:
    0,30 18-23 * * * /etc/init.d/smb restart
    
    实例10:每星期六的晚上11 : 00 pm重启smb
    命令:
    0 23 * * 6 /etc/init.d/smb restart
    
    实例11:每一小时重启smb
    命令:
    * */1 * * * /etc/init.d/smb restart
    
    实例12:晚上11点到早上7点之间,每隔一小时重启smb
    命令:
    * 23-7/1 * * * /etc/init.d/smb restart
    
    实例13:每月的4号与每周一到周三的11点重启smb
    命令:
    0 11 4 * mon-wed /etc/init.d/smb restart
    
    实例14:一月一号的4点重启smb
    命令:
    0 4 1 jan * /etc/init.d/smb restart
    
    实例15:每小时执行/etc/cron.hourly目录内的脚本
    命令:
    01 * * * * root run-parts /etc/cron.hourly
    说明:
    run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

    (3) 使用注意

    注意环境变量问题
    有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

    在 crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程 序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这 样,系统执行任务调度时就没有问题了。

    不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

    脚本中涉及文件路径时写全局路径;

    脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

    cat start_cbp.sh
    #!/bin/sh
    source /etc/profile
    export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
    /usr/local/jboss-4.0.5/bin/run.sh -c mev &
    • 当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:

    0 . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

    注意清理系统用户的邮件日志
    每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。

    例如,可以在crontab文件中设置如下形式,忽略日志输出:

    0 */3* /usr/local/apache2/apachectl restart >/dev/null 2>&1

    /dev/null 2>&1表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

    系統級任務排程與使用者級任務排程
    系統級任務排程主要完成系統的一些維護操作,使用者級任務排程主要完成使用者自訂的一些任務,可以將使用者級任務排程放到系統級任務調度來完成(不建議這麼做),但是反過來卻不行,root用戶的任務調度操作可以透過crontab –uroot –e來設置,也可以將調度任務直接寫入/etc /crontab文件,需要注意的是,如果要定義一個定時重啟系統的任務,就必須將任務放到/etc/crontab文件,即使在root用戶下創建一個定時重新啟動系統的任務也是無效的。

    其他注意事項
    新建立的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啟cron則馬上執行。

    當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或是查看日誌看某個job有沒有執行/報錯tail -f /var/log/cron

    千萬別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除使用者的Crontab檔案。刪除了該用戶的所有crontab都沒了。

    在crontab中%是有特殊意義的,表示換行的意思。如果要用的話必須進行轉義\%,如常用的date ' %Y%m%d'在crontab裡是不會執行的,應該換成date ' \%Y \%m\%d'

    以上是Linux怎麼定時執行任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    什么是linux设备节点什么是linux设备节点Apr 18, 2022 pm 08:10 PM

    linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

    Linux中open和fopen的区别有哪些Linux中open和fopen的区别有哪些Apr 29, 2022 pm 06:57 PM

    区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

    linux中什么叫端口映射linux中什么叫端口映射May 09, 2022 pm 01:49 PM

    端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

    linux怎么判断pcre是否安装linux怎么判断pcre是否安装May 09, 2022 pm 04:14 PM

    在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

    linux中eof是什么linux中eof是什么May 07, 2022 pm 04:26 PM

    在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

    linux怎么查询mac地址linux怎么查询mac地址Apr 24, 2022 pm 08:01 PM

    linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

    手机远程linux工具有哪些手机远程linux工具有哪些Apr 29, 2022 pm 05:30 PM

    手机远程linux工具有:1、JuiceSSH,是一款功能强大的安卓SSH客户端应用,可直接对linux服务进行管理;2、Termius,可以利用手机来连接Linux服务器;3、Termux,一个强大的远程终端工具;4、向日葵远程控制等等。

    linux中lsb是什么意思linux中lsb是什么意思May 07, 2022 pm 05:08 PM

    linux中,lsb是linux标准基础的意思,是“Linux Standards Base”的缩写,是linux标准化领域中的标准;lsb制定了应用程序与运行环境之间的二进制接口,保证了linux发行版与linux应用程序之间的良好结合。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。