linux crontab 命令執行問題

2022-08-22 02:48:11 字數 1561 閱讀 9247

在伺服器上設定了乙個r指令碼的crontab任務,死活不執行。在網上搜了很久,終於解決了。

這裡主要說一下crontab異常時,該如何排查。

假設cron命令為:* * * * rscript /your_path/hello_world.r >> /your_path/hello_world.log

1.首先檢查cron命令是否完全正確。

雖然很簡單,但是我還是在這吃了不少苦。

具體症狀主要表現為cron不執行,並且crontab執行日誌下找不到執行記錄。

contab的執行日誌在/var/log/cron.log中(ubunutu),vi之後使用ng跳到最後一行,可以看到最新的執行記錄。

如果沒有看到cron命令,則很可能是命令或者命令路徑不正確。仔細檢查一下。

注:no mta installed, discarding output 這個資訊,講道理與執行指令碼與否無關。可以不必理會。

(crontab執行指令碼時是不會直接錯誤的資訊輸出,而是會以郵件的形式傳送到你的郵箱裡,這時候就需要郵件伺服器了,如果你沒有安裝郵件伺服器,它就會報這個錯)

2.crontab環境配置問題

如果手動在shell中可以執行,但是在crontab中無法執行時,就應該考慮這個問題了。

這個時候在cron日誌中可以看到cron命令的執行記錄,但是指令碼就是死活不執行。hello_world.log下什麼資訊都沒有。

搜到很多內容,說是環境配置的問題(確實也應該是環境配置的問題)。簡單的說就是crontab執行時的環境和我們自己在shell中執行時的環境是不一致的。

更詳細的內容可以參考這裡:

雖然鏈結裡說了很多解決方案,但是我並不知道他在說什麼,呵呵。

我直接指定了命令的絕對路徑,將cron命令改為:* * * * /usr/local/bin/rscript /your_path/hello_world.r >> /your_path/hello_world.log

再次編輯crontab,終於在hello_world.log中找到了輸出資訊。

* 絕對路徑根據自己安裝程式位置的不同而不同。常見的有/usr/bin,/usr/local/bin等。如果不確定,就自己去路徑下ls看是否存在相應程式。

* 網上很多說在指令碼中首行加上環境路徑(如#!/usr/bin/env rscripit)。但是我沒成功,不知道為什麼。

3.指令碼路徑的問題

問題為手動執行指令碼正常, 但是通過crontab自動執行則不成功。檢視crontab的log發現在指定時間執行了任務,只是看不到結果。

剛開始以為是許可權或者環境的問題,但細想又想不通。

事實上當crontab的log顯示cron任務執行,但沒有結果輸出的時候,應該開始懷疑本身指令碼的問題了。

以我的例子來說,debug之後發現是指令碼含檔案路徑,並且使用的相對路徑。因為crontab環境和手動執行指令碼時的環境不同,導致檔案路徑無效,進而指令碼無效,於是crontab沒有結果。將指令碼中的相對路徑改成絕對路徑之後,crontab的結果就正常了。

crontab命令指南,可以參考:  雖然我依然沒看懂,呵呵。

linux crontab命令詳解

12 3 root tar czf usr local backups daily etc.tar.gz etc dev null 2 1這條語句將在每天的凌晨3點12分 03 12 執行tar czf usr local backups daily etc.tar.gz etc命令。dev nul...

linux crontab命令使用

cron用法說明 cron 於希臘單詞chronos 意為 時間 是linux系統下乙個自動執行指定任務的程式。例如,你想在每晚睡覺期間建立某些檔案或資料夾的備份,就可以用cron來自動執行。cron服務是linux的內建服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務 sbin servi...

Linux crontab 計畫命令

標籤 linux apache user date file shell 2009 08 04 09 31 214009人閱讀收藏 舉報 linux學習 7 基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59 每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列...