天天看點

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

linux作業系統環境:Ubuntu 16.04 

目錄

           " (CRON) info (No MTA installed, discarding output)"錯誤的解決辦法

【建議:.sh 這個SHELL腳本裡面添加 > 直接定向 !!】

  crontab使用切記:【cmd部分不能直接加一個sh檔案,需要先cd YOURSHDIR && ./YOURDH.sh】 

【補充:linux的标準輸入、标準輸出、錯誤輸出和黑洞】

【補充:>> 和 > 的差別】

寫了一個test腳本,準備來定時備份我的mySQL資料庫,然後使用crontab這個指令來實作,

腳本内容:

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

執行效果: 

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

定時腳本内容:(執行指令  crontab -e  :檢視目前使用者的計劃任務  ;-l :是列出目前使用者下可用的定時腳本) 

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

【問題抛出】測試的時候一直都沒法每個一分鐘就執行腳本列印出來~

【問題探究】

1.檢查crontab這個服務有沒有開啟,沒有crontab的朋友們就需要先安裝再使用,

檢查crontab這個服務的開啟狀态:service cron status

如果沒有開啟就開啟:service cron start

【注意】修改了定時腳本之後,無需使用 service cron restart 重新開機服務!!

2.檢查定時腳本的日志:

$ tail /var/log/syslog
           

或者

$ service cron status
           

發現會有個這樣的警告: (CRON) info (No MTA installed, discarding output)

報錯的主要原因是沒有配置郵件伺服器.

" (CRON) info (No MTA installed, discarding output)"錯誤的解決辦法

有兩種情況會導緻這個現象.

(1)指令中含有shell指令

當你運作的任務中包含shell指令,就會報錯.例如下面的第二個任務:

* * * * * date >log

* * * * * ./test.sh >`date`.log (錯誤)

可以通過安裝郵件伺服器解決該問題. (平時不怎麼用到,是以我選擇不安裝郵件伺服器,就通過重新定向)

或者是把該shell指令放到一個檔案中,執行該檔案.然後重定向到null檔案.

(2)執行任務過程中會往螢幕輸出内容

當你執行的是個腳本檔案時,你可以把檔案的輸出重定向到某個檔案中.例如: 

* * * * * cd /home/kai/Destop && ./test.sh > temp.log 

或者不需要保留執行的輸出,則重定向到null中: 

* * * * * cd /home/kai/Destop && ./test.sh > /dev/null 2>&1

【執行個體】

test.sh的執行指令:

#!/bin/bash
filename="test_"`date +'%Y%M%D%H%M%S'`".sql"
echo $filename 
           

成功例子:

* * * * * cd /home/kai/Desktop/ && ./test.sh >temp.log
           

【建議:.sh 這個SHELL腳本裡面添加 > 直接定向 !!】

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

crontab使用切記:【cmd部分不能直接加一個sh檔案,需要先cd YOURSHDIR && ./YOURDH.sh】 

crontab寫定時腳本【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

(看到有些教程可以直接寫.sh檔案就可以執行,不過我嘗試了就是不行的 ===》确實可以執行!!) 

【經過一晚上之後,發現在我的~/路徑下存在一個temp.log的檔案,原來昨天并不是沒有執行.sh檔案,而是執行的效果沒有在跟.sh檔案相同路徑下,而是在目前使用者所在的 $HOME 目錄下面,是以想要生成在與.sh相同的目錄下面的日志需要先cd YOURDIR,再執行你的sh檔案!!!】

【補充:linux的标準輸入、标準輸出、錯誤輸出和黑洞】

标準輸入0    從鍵盤獲得輸入 /proc/self/fd/0 

标準輸出1    輸出到螢幕(即控制台) /proc/self/fd/1 

錯誤輸出2    輸出到螢幕(即控制台) /proc/self/fd/2 

/dev/null代表linux的空裝置檔案,所有往這個檔案裡面寫入的内容都會丢失,俗稱“黑洞” 

1、2>/dev/null意思就是把錯誤輸出到“黑洞” 

2、>/dev/null 2>&1預設情況是1,也就是等同于1>/dev/null 2>&1。意思就是把标準輸出重定向到“黑洞”,還把錯誤輸出2重定向到标準輸出1,也就是标準輸出和錯誤輸出都進了“黑洞” 

3、2>&1 >/dev/null意思就是把錯誤輸出2重定向到标準出書1,也就是螢幕,标準輸出進了“黑洞”,也就是标準輸出進了黑洞,錯誤輸出列印到螢幕 

關于這裡”&”的作用,我們可以這麼了解2>/dev/null重定向到檔案,那麼2>&1,這裡如果去掉了&就是把錯誤輸出給了檔案1了,用了&是表明1是标準輸出

【補充:>> 和 > 的差別】

>> 是追加内容

> 是覆寫原有内容

繼續閱讀