Crontab 執行階段出現錯誤

Crontab 執行階段出現錯誤

我正在嘗試使用 crontab 以程式設計方式在我的伺服器上運行一些 scrapy 蜘蛛。我嘗試了幾個指令,最後這個 crontab 沒有運行,也沒有給我任何有用的錯誤。

#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours

這個 crontab 不起作用,在syslog我得到這個:

Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)

在輸出中,我得到這個:

/bin/sh: 1: scrapy: not found

我已經安裝了 scrapy 並且命令可以獨立運行。

答案1

預設情況下,Cron 會向使用者發送一封郵件,其中包含其執行的命令的輸出。但是,正如它所說,沒有安裝 MAT(郵件傳輸代理程式),因此 cron 無法發送郵件並丟棄命令輸出。您可以透過將 cron 行變更為以下內容,將輸出自行重新導向至檔案或 void (/dev/null):

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1

或者

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1

第二種可能性是安裝 MTA(sendmail、postfix 或類似的) - 並將其配置為處理本地郵件。

或者您可以確保您的腳本不會產生任何輸出。

答案2

scrapy文件在任何地方都找不到PATH(見下文)。要查找它所在的位置,請在互動式 shell 中使用以下命令:

which scrapy

它將顯示其絕對路徑,例如/usr/local/bin/scrapy。將絕對路徑放入 crontab:

47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours

關於PATH變數

PATH每當您未在命令列或腳本中指定確切路徑時,都會使用變數來搜尋程式。它也是由設定檔設定和 crontab 定義的。它通常看起來像:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

該範例來自我的/etc/crontab.然而,您在 crontab 中提供的值看起來不尋常...

PATH=/root/

你不是想設定工作目錄這裡?

關於舍邦

舍邦是許多腳本的第一行。它指定哪個解釋器應解釋該檔案。它在 crontab 中沒有任何意義,您應該將其刪除。 crontab 是一個數據Cron 文件,而不是腳本。

相關內容