Linux

命令在終端中有效,但在 crontab 中無效

  • May 17, 2021

我正在測試設置一些備份。我將我的 crontab 設置為每分鐘執行一次。我有一個安裝在 machine2 上的磁碟,我會將備份上傳到該磁碟。

我正在將文件夾的內容壓縮/home/user/importantimportant.tar.gz並將 tar.gz 文件移動到 machine2 的/mnt/backup2文件夾中。

cron 選項卡條目:

* * * * * tar -czvf /home/user/important/important.tar.gz /home/user/important && 
rsync -vzhe ssh /home/user/important/*.tar* machine2:/mnt/backup2

這不會與 crontab 一起執行。

我在終端中執行相同的命令。然後它工作:

/home/user/important/
/home/user/important/a.txt
/home/user/important/test.txt
/home/user/important/this.txt
/home/user/important/is.txt
/home/user/important/important.tar.gz
/home/user/important/important.txt
/home/user/important/test1/
important.tar.gz

sent 9.85K bytes  received 35 bytes  19.76K bytes/sec
total size is 9.75K  speedup is 0.99

並且在 /mnt/backup2 文件夾中的 machine2 上接收到文件。

有什麼建議為什麼它不適用於 crontab?我正在執行 Ubuntu。

很難知道這裡真正的問題是什麼,但是您可以嘗試以下幾件事:

  • 把這個單線放在一個腳本中,chmod -x它並在 crontab 中使用它

這將使您能夠更好地控制正在發生的事情(例如:set -x等)。

  • 啟用調試輸出以查看導致您的 crontab 條目無法按預期工作的原因:
#!/bin/bash -x

或者如果你正在使用sh

#!/bin/sh -x

或者只是使用set -x

我猜這可能是權限或shell globing的問題,但如果在腳本中沒有得到解決,你應該這樣做:

script.sh &> script.log

因此,當作為 cronjob 執行時,您可以清楚地看到失敗的原因和方式……

  • 檢查是否有任何條目crontab

這是顯而易見的,但由於有些人可能會使用該crontab文件而不是直接通過以下方式添加它crontab

echo "job entry" | crontab -

或“正常”方式,但需要打開文本編輯器,並且使用者手動複製粘貼/鍵入他們的作業/crontab條目……:

crontab

或者,如果您更喜歡防止重複輸入的方法:

cronadd() {
if crontab -l | grep -wq -- "$@"; then
   :
else
   (crontab -l 2>/dev/null; echo "$@") | crontab -
fi
}

你可以像這樣使用它:

cronadd "job entry here"

它應該可以防止添加重複的作業,並且您可以確保它確實已添加……crontab -l但請務必檢查。

引用自:https://unix.stackexchange.com/questions/649981