簡體   English   中英

為什么我的 crontab 不能正確執行 bash?

[英]Why isn't my crontab executing bash properly?

I am a total noob to Linux and am using Raspbian on a Raspberry Pi 4. I created a bash script which updates an HTML file and runs some python programs to tweet a random article from Wikipedia's List of Unusual Articles. 這是我正在運行的 bash 腳本:

#! /bin/bash
wget -q en.wikipedia.org/wiki/Wikipedia:Unusual_articles -O Wikipedia:Unusual_articles
python3 parser.py
python3 tweeter.py

在我的 crontab 中,我有這個命令在每天下午 12 點運行 bash 腳本:

0 12 * * * /home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh

當我使用bash手動運行腳本時,它工作得很好,但我不明白為什么我的 cron 不工作。 即使我設置MAILTO=my@email.com它也不會給我發電子郵件。

編輯:我運行echo $PATH並添加了輸出到我的 cron 的內容。 這是 cron 現在的樣子(出於調試目的,我讓它每 2 分鍾運行一次):

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
MAILTO=my@email.com
*/2 * * * * bash /home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh

這就是 bash 腳本現在的樣子:

#! /bin/bash
wget -q en.wikipedia.org/wiki/Wikipedia:Unusual_articles -O Wikipedia:Unusual_articles
python3 parser.py
python3 tweeter.py

cron 作業以用戶的主目錄作為其工作目錄運行。 這意味着所有未指定顯式路徑(或通過類似$PATH的方式使用查找)的文件引用都將位於您的主目錄中。

指定腳本的路徑根本不會改變這一點。 我懷疑當您以交互方式測試腳本時,您會執行以下操作:

cd /home/pi/Code/Python/TwitterBots/UArticleBot
./TweetRandom.sh

嘗試這樣做,看看它做了什么:

cd ~
/home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh

我的猜測是它會做與從 cron 作業運行時相同的事情:在你的主目錄中創建一個Wikipedia:Unusual_articles文件,然后因為找不到parser.pytweeter.py腳本而出現錯誤。

解決此問題的一種方法是對所有內容使用顯式路徑(這可能還涉及修改 python 腳本,因為它們可能假定 Wikipedia 文件位於當前目錄中)。

另一種選擇是在執行任何其他操作之前讓您的腳本cd到它自己的目錄。 一般來說,這可能有點棘手(請參閱BashFAQ #28 ),但這應該適用於您的情況:

#!/bin/bash
cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error cd'ing to script directory" >&2
    exit 1
}
... rest of script here

順便說一句,在對 cron 作業進行故障排除時,捕獲它們在運行時打印的錯誤和其他信息非常有用。 cron 會嘗試為您解決這個問題,但它並不總是能很好地工作。 您可以通過將這樣的重定向添加到 cron 條目的末尾來將 output 定向到日志文件:

0 12 * * * /home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh >>/tmp/tweetjob.log 2>&1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM