1. 程式人生 > >Linux下定時任務(系統任務排程、使用者任務排程)crontab使用詳解

Linux下定時任務(系統任務排程、使用者任務排程)crontab使用詳解

一、簡介

crond是Linux下用來週期性的執行某種任務或等待處理某些事件的一個守護程序,與windows下的計劃任務類似,在CentOS Linux release 7.2.1511中預設是開機啟動的,大家可以使用命令:systemctl status crond進行檢視。 crond程序定期(每分鐘)檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。使用者在cron表
(也被稱為crontab檔案)指定了定時任務,crontab也就是我們常見的定時任務設定命令。Linux下的任務排程分為兩類,系統任務排程和使用者任務排程。

系統任務排程:系統週期性所要執行的工作,比如寫快取資料到硬碟、日誌清理等。/etc/crontab檔案就是系統任務排程的配置檔案。

[root@GeekDevOps ~]# 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

使用者任務排程:使用者定期要執行的工作,比如使用者資料備份、定時郵件提醒等。使用者可以使用 crontab 工具來定製自己的計劃任務。所有使用者定義的crontab檔案都被儲存在/var/spool/cron目錄中。其檔名與使用者名稱一致,使用者許可權檔案如下:

/etc/cron.deny 該檔案中所列使用者不允許使用crontab命令

/etc/cron.allow 該檔案中所列使用者允許使用crontab命令,在CentOS7.2中不存在該檔案(If the cron.allow file exists, a user must be listed in it to be allowed to use cron If the cron.allow file does not exist but the cron.deny file does exist, then a user must not be listed in the cron.deny file in order to use cron. If neither of these files exists, only the super user is allowed to use cron.)

/var/spool/cron/ 所有使用者crontab檔案存放的目錄,以使用者名稱命名。

二、通過官方渠道獲取幫助資料

  • crond
[[email protected] ~]# crond -h
Usage:
 crond [options]
Options:
 -h         print this message 
 -i         deamon runs without inotify support
 -m <comm>  off, or specify prefered client for sending mails
 -n         run in foreground
 -p         permit any crontab
 -P         use PATH="/usr/bin:/bin"
 -c         enable clustering support
 -s         log into syslog instead of sending mails
 -x <flag>  print debug information
[[email protected] ~]# man crond
CRON(8)                                                                           System Administration                                                                          CRON(8)
NAME
       crond - daemon to execute scheduled commands

SYNOPSIS
       crond [-c | -h | -i | -n | -p | -P | -s | -m<mailcommand>]
       crond -x [ext,sch,proc,pars,load,misc,test,bit]

通過以上幫助資訊,我們可以知道crond是執行任務計劃的一個守護程序。在使用crontab之前我們可以根據幫助資訊來設定相關選項,一般情況下我們都使用預設值。

  • crontab
[ro[email protected] ~]# crontab --help
crontab:無效選項 -- -
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]
Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging
 CRONTAB(1)                                                                            User Commands                                                                           CRONTAB(1)
[[email protected] ~]# man crontab
NAME
       crontab - maintains crontab files for individual users
SYNOPSIS
       crontab [-u user] file
       crontab [-u user] [-l | -r | -e] [-i] [-s]
       crontab -n [ hostname ]
       crontab -c
DESCRIPTION
       Crontab  is  the  program  used  to install a crontab table file, remove or list the existing tables used to serve the cron(8) daemon.  Each user can have their own crontab, and
       though these are files in /var/spool/, they are not intended to be edited directly.  For SELinux in MLS mode, you can define more crontabs for each range.  For more information,
       see selinux(8).
       In  this  version  of Cron it is possible to use a network-mounted shared /var/spool/cron across a cluster of hosts and specify that only one of the hosts should run the crontab
       jobs in the particular directory at any one time.  You may also use crontab(1) from any of these hosts to edit the same shared set of crontab files, and to set and  query  which
       host should run the crontab jobs.

三、特別說明

1.通過/etc/crontab檔案,我們可以清楚地看到每個欄位的含義及取值範圍,此處不再進行贅述。
2.特殊字元的用法

特殊字元 含義
*(星號) 代表所有可能的值,只要其他值滿足都執行
,(逗號) 用逗號隔開表示該欄位取值
-(減號) 兩個可取值的整數之前的取值範圍
/n(斜槓) 時間間隔頻率

3.系統任務排程我們可以通過/etc/crontab檔案直接配置。使用者任務排程我們一般通過crontab命令來進行配置,使用者任務排程的配置儲存/var/spool/cron/目錄下,並以使用者名稱稱命名。系統任務排程可以通過直接修改/etc/crontab來配置。新建立的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啟crond則馬上執行。
4.當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者檢視日誌看某個job有沒有執行/報錯tail -f /var/log/cron。
5.執行crontab -r需要特別謹慎。它從Crontab目錄(/var/spool/cron)中刪除使用者的crontab檔案。刪除了該使用者的所有crontab都沒了。
6.在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,如經常用的date ‘+%Y%m%d’在crontab裡是不會執行的,應該換成date ‘+\%Y\%m\%d’。

四、用法舉例

1.建立演示賬號crontab。

[root@GeekDevOps ~]# useradd -c "Crontab demo." crontab

2.星號(*)使用舉例。

[root@GeekDevOps ~]# date
20180318日 星期日 23:58:50 CST
[root@GeekDevOps ~]# crontab -u crontab -e
no crontab for crontab - using an empty one
crontab: installing new crontab
[root@GeekDevOps ~]# crontab -l -u crontab
5 0 * * *  echo "GeekDevOps"
[root@GeekDevOps ~]# su crontab
[crontab@GeekDevOps ~]$ cat /var/spool/mail/crontab
From crontab@GeekDevOps.localdomain  Mon Mar 19 00:05:01 2018
Return-Path: <crontab@GeekDevOps.localdomain>
X-Original-To: crontab
Delivered-To: crontab@GeekDevOps.localdomain
Received: by GeekDevOps.localdomain (Postfix, from userid 1000)
    id 4B1648D618; Mon, 19 Mar 2018 00:05:01 +0800 (CST)
From: "(Cron Daemon)" <crontab@GeekDevOps.localdomain>
To: crontab@GeekDevOps.localdomain
Subject: Cron <crontab@GeekDevOps> echo "GeekDevOps"
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=52>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/1000>
X-Cron-Env: <LANG=zh_CN.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/crontab>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=crontab>
X-Cron-Env: <USER=crontab>
Message-Id: <20180318160501.4B1648D618@GeekDevOps.localdomain>
Date: Mon, 19 Mar 2018 00:05:01 +0800 (CST)
GeekDevOps

以上例子中完整演示了crontab從建立到執行的過程。“5 0 * * * echo “GeekDevOps””表示在每天00:05執行命令:echo “GeekDevOps”。後面的星號表示只要前面條件滿足都執行。例子中的-u選項指定了使用者:crontab,-l選項列舉了相關使用者的使用者任務排程,不指定使用者則預設為root。執行結果預設寫入到使用者mail目錄下的相關檔案中。

3.逗號(,)的使用舉例。

[crontab@GeekDevOps ~]$ crontab -e
crontab: installing new crontab
[crontab@GeekDevOps ~]$ crontab -l
5 0 * * *  echo "GeekDevOps"
3 2,6,8 * * * ls /usr/local

現在我們已經把使用者切換到crontab下,因此無需額外指定-u選項相關內容。“3 2,6,8 * * *”表示每天的02:03:00、06:03:00、08:03:00分別執行一次命令:ls /usr/local。

4.減號(-)的使用舉例。

[crontab@GeekDevOps ~]$ crontab -e
crontab: installing new crontab
[crontab@GeekDevOps ~]$ crontab -l
5 0 * * *  echo "GeekDevOps"
3 2,6,8 * * * ls /usr/local
0 2-6 * * 6 df -h /

例子中的“0 2-6 * * 6 df -h /”表示使用者crontab在每週六的02:00、03:00、04:00、05:00、06:00執行命令:df -h / 。

5.斜槓(/)的使用舉例。

[crontab@GeekDevOps ~]$ exit
exit
[root@GeekDevOps ~]# crontab -e 
no crontab for root - using an empty one
crontab: installing new crontab
[root@GeekDevOps ~]# crontab -l
*/1 * * * * echo "GeekDevOps">>/root/GeekDevOps.txt
[root@GeekDevOps ~]# cat /root/GeekDevOps.txt 
GeekDevOps
GeekDevOps

例子中表示每隔1分鐘執行一次命令:echo “GeekDevOps”>>/root/GeekDevOps.txt。

6.crontab的使用非常簡單,很容易理解,只要在取值範圍內設定執行的值基本是沒有問題的。現在我們要刪除已經設定的這些定時任務。

[[email protected] ~]# crontab -u crontab -r -i
crontab: really delete crontab's crontab? y
[[email protected] ~]# crontab -u crontab -l
no crontab for crontab

例子中,選項-r表示刪除所有定時任務。選項-i表示在刪除前進行再次確定,輸入y或者Y才能真正刪除。

7.備份我們設定的使用者任務排程配置檔案。

[root@GeekDevOps ~]# cat /var/spool/cron/root 
*/1 * * * * echo "GeekDevOps">>/root/GeekDevOps.txt
[root@GeekDevOps ~]# cat /var/spool/cron/root >>contab.bak

8.系統任務排程的使用舉例。

[root@GeekDevOps ~]# vi /etc/crontab 
[root@GeekDevOps ~]# cat /etc/crontab 
*/1 * * * * crontab echo "GeekDevOps">>~/GeekDevOps.txt
[root@GeekDevOps ~]# crontab -l
no crontab for root
[root@GeekDevOps ~]# ls -l /home/crontab/GeekDevOps.txt 
-rw-r--r--. 1 crontab crontab 44 319 01:15 /home/crontab/GeekDevOps.txt
[root@GeekDevOps ~]# cat /home/crontab/GeekDevOps.txt 
GeekDevOps

系統任務排程與使用者任務排程不一樣,需要直接在/etc/crontab裡面配置,如果需要指定使用者,還需要在執行命令前指定使用者名稱。通過crontab -l 命令是檢視不到系統任務排程任務的。

相關推薦

Linux 操作gpio兩種方法,驅動和mmap

目前我所知道的在linux下操作GPIO有兩種方法:  1.  編寫驅動,這當然要熟悉linux下驅動的編寫方法和技巧,在驅動裡可以使用ioremap函式獲得GPIO物理基地址指標,然後使用這個指標根據ioctl命令進行GPIO暫存器的讀寫,並把結果回送到應用層。這裡提供

Linux檔案操作總結系統呼叫和標準IO庫函式

一、系統呼叫 ❑ open: Open a file or device ❑ read: Read from an open file or device ❑ write: Write to a file or device ❑ close: Close the file

分散式系統一致性ACIDCAPBASE二段提交三段提交TCC冪等性原理

本文內容屬於分散式事物處理範疇,強調強一致性與區塊鏈倡導的共識一致性略有不同,主要是最近以太坊ico導致交易擁堵問題引起我的思考,是不是有可能利用已有的解決方案進行演變增加每個節點的提交時的一致性,簡單來講就是在p2p網路中實現部分強一致性,提升區塊鏈交易效能,文中TCC就是一種演變思路,很

8張Linux思維導圖定位自己能力清楚學習方向

Linux學習路徑: Linux桌面介紹: FHS(檔案系統目錄標準) 以上三張圖,都是在學習實驗樓上的課程——Linux 基礎入門 ,教程裡面看到的。 Linux需要特別注意的目錄 linux 核心學習路線 這個我是在簡書上看到的,地址:點這裡

Linux系統中rarunrar命令安裝和使用

安裝: 如果是以tarball形式安裝安裝,去rar網站下載相應版本的tarball。地址為http://www.rarlab.com/ 以3.9.3版本為例,如果是i386的平臺,執行以下命令:也可以去官方網站下載最新版 http://www.rarlab.com/rar/rarlinux-3.8.0.t

Android 反編譯工具apktool ,dex2jar,jd-gui.exe使用

Apktool 用法 1.下載Apktool 工具(包含aapt.exe & apktool.bat & apktool.jar)。如下圖 2.將準備進行反編譯的apk 放到 apktool.bat 檔案所在路勁。 3.在cm

Linux定時任務系統任務排程使用者任務排程crontab使用

一、簡介 crond是Linux下用來週期性的執行某種任務或等待處理某些事件的一個守護程序,與windows下的計劃任務類似,在CentOS Linux release 7.2.1511中預設是開機啟動的,大家可以使用命令:systemctl status c

linux定時任務crontab

每一個 usr mil 不同 local soft mic 情況下 設備 CRONTAB概念/介紹 crontab命令用於設置周期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於“crontab”文件中,以供之後讀取和執行。 cr

linux定時任務計劃的使用

pool echo 分鐘 bash copy 任務計劃 單引號 example 情況 一、定時任務之at實現; PS:本次操作以CentOS 7.5為實驗環境; 1.1、at軟件包說明 最小化安裝,可能沒有at或atq這個命令,at來自於軟件包at,如果yum能用,直

linux 定時任務

crontab -e 新建/編輯一個任務 crontab -l 列出所有任務 crontab 格式: 基本格式 : *  *  *  *  *  command 分鐘 小時 日 月 星期 命令 第1列表示分鐘1~59 每分鐘用 */1表示 第2列表示小時1~23(0表示0點

【python linux定時任務跑】crontab -e使用

/etc/crontab 就是crontab 的配置檔案 linux 下輸入命令 crontab -l 查詢當前系統使用者設定了哪些執行任務 linux 下輸入命令 crontab -r 清空當前系統使用者設定的所有任務 linux 下輸入命令 crontab -e 編輯和設定當前系統使用者要

Linux定時任務的檢視及取消

原文地址:http://changwu0101.blog.163.com/blog/static/1104246392011820104654131/ $ crontab --help crontab:無效選項 -- - crontab: usage error: unrecognized option u

Linux 定時任務crontab的備忘

檢視定時任務的狀態: service crond status 檢視定時任務列表:crontab -l 編輯定時任務:crontab -e 可以指定編輯某使用者的定時任務:crontab -u oracle -e 定時任務的寫法: # Example of job definition:

linux定時執行任務的方法

cnblogs root dream days 分鐘 ab命令 hour 小時 var 在LINUX中你應該先輸入crontab -e,然後就會有個vi編輯界面,再輸入0 3 * * 1 /clearigame2內容到裏面 :wq 保存退出。 在LINUX中,周

linux定時執行任務方法

  (1)at命令   假如我們只是想 要讓特定任務執行一次,那麼,這時候就要用到at監控程式了。   設定at命令很簡單,指示定執行的時間,那麼就會在哪個時候執行。at類似列印 程序,會把任務放到/var/spool/at目錄中,到指定時間執行它 。at命令相當

Linux定時任務的設定入門

一、建立shell檔案 由於個人原因,偏向於先將定時執行的任務全部寫到一個shell檔案,然後在定時任務時,只需要執行該shell檔案即可。 以下為shell檔案示例,定時清理tomcat下的catlina.out檔案 #!bin/sh echo "開

linux定時執行任務的方法 crontab

在LINUX中,週期執行的任務一般由cron這個守護程序來處理[ps -ef|grep cron]。cron讀取一個或多個配置檔案,這些配置檔案中包含了命令列及其呼叫時間。cron的配置檔案稱為“crontab”,是“cron table”的簡寫。一、cron在3個地方查詢

Linux定時任務crontab實踐

service crond start //啟動crond服務 ps -ef | grep crond //檢視服務是否已經執行 cron檔案語法: //和java中的cron表示式基本一致,缺少秒,多了命令 分 小時 日 月 星期 命令 0-59 0-23 1-31 1-

linux定時執行任務的方法 crontab 用法說明

linux下定時執行任務的方法 【非原創,個人網上收集整理了一下】在LINUX中,週期執行的任務一般由cron這個守護程序來處理[ps -ef|grep cron]。cron讀取一個或多個配置檔案,這些配置檔案中包含了命令列及其呼叫時間。cron的配置檔案稱為“crontab

Linux搭建實現HttpRunnerManager的非同步執行定時任務任務監控

前言 在之前搭建的HttpRunnerManager介面測試平臺,我們還有一些功能沒有實現,比如非同步執行、定時任務、任務監控等,要完成非同步執行,需要搭建 RabbitMQ 等環境,今天我們就來實現這些功能。 需要在Linux上提前準備的環境(下面是本人搭建時的環境): 1,HttpRunnerManag