導致crontab定時任務不生效問題可能的原因非常多
首先,排查一些可能會導致問題出現的簡單原因。
1.linux的時間與網際網路時間不一致
2.定時執行的.s**件無執行許可權
3.crontab程序未啟動
4.定時任務重定向日誌的路徑不存在
5.環境變數問題
6.沒有寫絕對路徑
tail -f /var/log/cron
dec 3 08:30:01test crond[21199]: (root) failed to open pam security session (拒絕許可權)
可以看到確實有報錯,但是沒有具體報錯的原因,只知道是pam驗證有問題。
通過查閱網上的文章將/etc/pam.d/crond
中的session required pam_loginuid.so
required改為sufficient可以解決。經測試,確實成功了,但是文章沒有說明原因,其他機器也是相同設定crontab卻沒有問題,說明這裡不是根本原因,這裡涉及pam模組認證的知識。
pam認證一般遵循這樣的順序:service(服務)→pam(配置檔案)→pam_*.so。pam認證首先要確定那一項服務,然後載入相應的pam的配置檔案(位於/etc/pam.d下)
pam驗證控制型別。
1、required驗證失敗時仍然繼續,但返回fail(使用者不會知道**失敗)。
2、requisite驗證失敗則立即結束整個驗證過程,返回fail。
3、sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續。
4、optional無論驗證結果如何,均不會影響(通常用於session型別)。
可以看到這裡是通過改為sufficient驗證成功則立即返回,不再繼續來達到忽略報錯的目的,但是這樣做有一定的風險。
tail -f var/log/secure
dec 3 15:19:01 hdyy1 crond[25439]: pam_limits(crond:session): could not set limit for 'nofile': 不允許的操作
可以看到是nofile引數有問題,檢視該引數的配置檔案
cat vi /etc/security/limits.d/90-nproc.conf
* soft nproc 196605
root soft nproc unlimited
* soft nofile 19660500
* hard nofile 19660500
* soft core 512000
* hard core 512000
可以看到此時該引數值為19660500,超出了系統的最大可設定值,將引數改為196605後crontab定時任務生效。 celery定時任務不生效原因
最近有乙個新的任務需要在後台定時進行,於是使用了celery的定時器來實現,但是加了任務後,到設定的時間點時任務就是不會被觸發執行。定位了很多地方,最後發現是時間設定有問題。需求 早上7點 凌晨12點每30分鐘執行一次,於是我將任務定義成了這樣 sender.add periodic task cr...
Scheduled 定時任務不生效原因
經過一系列的排查發現,原來是測試過程中,測試先將服務啟動。然後再手動調整伺服器本地時間為22 59 00秒,等23點的時候,看定時任務是否執行。因為,spring的定時器是在服務啟動初始化的時候,便已經指定了下一次定時任務執行的時間,這時候手動去調整本地時間是沒有效果的。我們在檢視 中可以看到,sc...
crontab定時任務
今天工作項有個任務是讓ubuntu定時執行某個指令碼,對postgresql資料庫進行定時備份。linux 系統都有個cron定時任務的機制。今天做些筆記,以便日後翻查。注意 cron機制是有個使用者系統的概念的,即分系統cron和使用者cron,每個使用者所執行的cron任務可能不同。1.以roo...