Linux定時任務工具crontab詳解及系統時間同步


Linux配置自動時間同步

linux下時間同步的兩種方法分享

tail -f /var/log/cron 

 

linux下定時執行任務的方法 

在LINUX中你應該先輸入crontab -e,然后就會有個vi編輯界面,再輸入0 3 * * 1 /clearigame2內容到里面 :wq 保存退出。

 

在LINUX中,周期執行的任務一般由cron這個守護進程來處理[ps -ef|grep cron]。cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。

cron的配置文件稱為“crontab”,是“cron table”的簡寫。

一、cron在3個地方查找配置文件:
1、/var/spool/cron/ 這個目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名,比如tom建的crontab任務對應的文件就是/var/spool/cron/tom。
一般一個用戶最多只有一個crontab文件。

二、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。

三、/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命令。

 

在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) commands(代表要執行的腳本)
    除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值范圍內的數字,"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。

 

基本格式 :

*****command

分  時  日  月  周  命令

第1列表示分鍾1~59 每分鍾用*或者 */1表示

第2列表示小時1~23(0表示0點)

第3列表示日期1~31

第4列表示月份1~12

第5列標識號星期0~6(0表示星期天)

第6列要運行的命令

 

crontab文件的一些例子:

#每晚的21:30重啟apache。

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

#每月1、10、22日

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

#每天早上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 

 

很多時候,我們計划任務需要精確到秒來執行,根據以下方法,可以很容易地以秒執行任務。
以下方法將 每10秒執行一次
 
1
2
3
4
5
6
7
# crontab -e
*  *  *  *  *  / bin / date >> / tmp / date.txt
*  *  *  *  *  sleep  10 / bin / date >> / tmp / date.txt
*  *  *  *  *  sleep  20 / bin / date >> / tmp / date.txt
*  *  *  *  *  sleep  30 / bin / date >> / tmp / date.txt
*  *  *  *  *  sleep  40 / bin / date >> / tmp / date.txt
*  *  *  *  *  sleep  50 / bin / date >> / tmp / date.txt

  

 
 
注意如果用如果命令用到%的話需要用\轉義
1
2
3
# backup mysql
00  01  *  *  *  mysqldump  - u root  - - password = passwd - d mustang >  / root / backups / mustang_$(date  + \ % Y\ % m\ % d_\ % H\ % M\ % S).sql
01  01  *  *  *  mysqldump  - u root  - - password = passwd - t mustang >  / root / backups / mustang - table_$(date  + \ % Y\ % m\ % d_\ % H\ % M\ % S).sql

 

 
 
 
 
 

使用date命令即可設置系統時間。

1  、查看系統時間

date                                         

2、設置當前系統時間為2017年2月20日12點57分0秒

date  -s "2017-2-20 12:57:00" 

執行結果如下圖所示:

 

 
 
 
 

 

Linux時間同步解決方案

由於硬件的原因,機器或多或少的根標准時間對不上,一個月的誤差幾秒到幾分鍾不等。對於服務器來說時間不准,會有很多麻煩。例如,支付的時候,無法下單,游戲無法登錄等。自己用的PC就無所謂了,手動改一下就行了
 

一,用ntpdate從時間服務器更新時間

如果你的linux系統根本沒有ntpdate這個命令

yum install ntp

安裝完了之后,你不要做什么配置,也不需要,直接測試一下

 

復制代碼
代碼如下:

[root@localhost ~]# ntpdate time.nist.gov 
22 Oct 21:11:43 ntpdate[5014]: adjust time server 207.200.81.113 offset -0.018788 sec

 

如果出去上面的內容說明,同步成功了。然后在crontab里面加上以下內容。

1.*/10 * * * * ntpdate time.nist.gov   #域名或IP 

每隔十分鍾同步一次。推薦幾個時間服務器。

time.nist.gov
time.nuri.net
asia.pool.ntp.org
asia.pool.ntp.org
asia.pool.ntp.org
asia.pool.ntp.org

二,用ntp搭建自己的時間服務器

上面我們是利用別人的時間服務器來同步時間,這些時間服務器都是比較權威的。當我們自己搭建時間服務器就不用crontab來定時去跑。

1,安裝時間服務器ntp

1.yum install ntp 

2,配置ntp

 

復制代碼
代碼如下:

[root@localhost ~]# cat /etc/ntp.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
restrict default ignore //默認不允許修改或者查詢ntp,並且不接收特殊封包
restrict 127.0.0.1 //給於本機所有權限
restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify //給於局域網機的機器有同步時間的權限
server time.nist.gov prefer //設置時間服務器,加prefer表示優先
server 0.asia.pool.ntp.org 
server 1.asia.pool.ntp.org 
server 2.asia.pool.ntp.org 
server 127.127.1.0 # local clock 
fudge 127.127.1.0 stratum 10 
driftfile /var/lib/ntp/drift 
keys /etc/ntp/keys

 

3,啟動 ntp

[root@localhost ~]# /etc/init.d/ntpd start 

4,查看並測試

 

復制代碼
代碼如下:

[root@localhost ~]# netstat -upnl |grep ntpd //查看時程
[root@localhost ~]# ntpq -pn //查看同步的服務器IP
remote refid st t when poll reach delay offset jitter 
============================================================================== 
50.77.217.185 .INIT. 16 u - 64 0 0.000 0.000 0.000 
202.90.158.4 .INIT. 16 u - 64 0 0.000 0.000 0.000 
202.71.100.89 .INIT. 16 u - 64 0 0.000 0.000 0.000 
202.134.1.10 .INIT. 16 u - 64 0 0.000 0.000 0.000 
*127.127.1.0 .LOCL. 10 l 18 64 377 0.000 0.000 0.001 
[root@localhost ~]# ntpstat //同步的結果
synchronised to local net at stratum 11 
time correct to within 12 ms 
polling server every 512 s

 

remote:即NTP主機的IP或主機名稱。注意最左邊的符號,如果由“+”則代表目前正在作用鍾的上層NTP,如果是“*”則表示也有連上線,不過是作為次要聯機的NTP主機。
refid:參考的上一層NTP主機的地址
st:即stratum階層
when:幾秒前曾做過時間同步更新的操作
poll:下次更新在幾秒之后
reach:已經向上層NTP服務器要求更新的次數
delay:網絡傳輸過程鍾延遲的時間
offset:時間補償的結果
jitter:Linux系統時間與BIOS硬件時間的差異時間

推薦第一種方法,雖然搭建個時間服務器,還是比較簡單的,但是我覺得沒有這個必要。如果用別人的時間服務器,每隔10分鍾同步一次,可以精確到毫秒。

作者:海底蒼鷹

CentOS系統時間與UTC時間不一致的解決方法

裝好centos 發現date不是咱想要的那個時間,腫么辦

1、vi /etc/sysconfig/clock   #編輯時間配置文件

     ZONE="Asia/Shanghai"
     UTC=false                          #設置為false,硬件時鍾不於utc時間一致
     ARC=false

2、ln -sf /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime    #linux的時區設置為上海時區

3、ntpdate 192.43.244.18    #對准時間

如果沒有安裝ntp服務器,剛需要先執行以下命令:

yum install ntp #安裝ntp服務器

4、/sbin/hwclock --systohc   #設置硬件時間和系統時間一致並校准

好了,我們的CentOS linux系統時間和計算機硬件時間終於都是cst時間了,並且都是上海時區,終於是正常啦。

centos vps修改時間及時區不同步 終極解決方案

由於初次使用國內hyper-v架構的VPS而且買前要指定裝windows還是centos系統,因為木有重裝的面板,對於用慣debian的我真是折磨,操作過程中遇到各種小問題。問客服直接一句只懂winows環境,讓你裝WIN你非要裝linux。好吧centos只能自己摸索了。由於hyper-v是微軟的一款虛擬化產品,早先是不支持linux的,又因為debian的公司化運營,使debian進入高速發展階段,就連google也拋棄linux定制而轉入debian開發陣營,這讓微軟感到了一些的壓力,於是乎微軟拉上centos,這就是為什么hyper-v只支持centos,而不支持其它linux衍生版本了,而且支持的還不是那么靠譜。吐槽完,那就來看正題吧。

  正題:hyper-v架構的centos5.5 VPS 裝完lnmp時間不同步,導致網站某些功能無法使用。

  網上找了各種方法均告失敗。然后自己又仔細找了一些文檔終於搞定了,淚奔啊。

  linux的時間管理很奇怪他分為系統時間和硬件時間還細分成什么UTC時間。-_-|||。

  硬件時間從根本上講是CMOS時鍾

  linux查看硬件時間:hwclock --show

  linux查看系統時間:date -R

  centos VPS的時間及時區同步。

  系統時間部分:

  1. 編輯時區配置文件:vi /etc/sysconfig/clock

  ZONE="Asia/Shanghai"

  UTC=false #把UTC設置為false關閉狀態

  ARC=false

  2.運行如下命令

  #刪除默認配置

  rm -rf /etc/localtime

  #重新指定配置

  ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  #同步系統時間

  ntpdate -u pool.ntp.org

  3.硬件時間部分:

  #將硬件時間調整成與目前的系統時鍾一致。

  hwclock --systohc
  或clock --systohc

  #強制系統時間寫入CMOS中防止重啟失效

  hwclock -w
  或clock -w

  以上步驟雖然成功了但是我這hyper-v架構的centos系統時間走的不准,1天能快幾分鍾的樣子。

  用crontab來同步一下時間即可解決。

  #編輯計划任務表

  vi /etc/crontab

  #表中最后添加下面這行內容

  30 5 * * * root /usr/sbin/ntpdate -u pool.ntp.org && /sbin/clock --systohc

  #每天5點半同步時間,clock --systohc是硬盤時間同步系統時間的意思。

 

 

如何查看crontab定時任務是否執行

http://jingyan.baidu.com/article/73c3ce28e7b298e50343d925.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM