Linux
命令在終端中有效,但在 crontab 中無效
我正在測試設置一些備份。我將我的 crontab 設置為每分鐘執行一次。我有一個安裝在 machine2 上的磁碟,我會將備份上傳到該磁碟。
我正在將文件夾的內容壓縮
/home/user/important
到important.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
但請務必檢查。