如何將輸出從 cron 中重定向到文件?
我有一個備份腳本,我需要在一天中的特定時間執行,所以我正在使用
cron
這個任務,並且在 cron 中我還試圖將備份腳本的輸出重定向到logfile
.
crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
在上面的 cron 條目中,我將兩者都重定向
stderr and stdout
到一個日誌文件。上面的 cron 作業執行良好
syslog
,它執行文件中提到的任務,backup.sh
但它沒有向日誌文件寫入任何內容。
/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
當我從 cli 執行腳本時,它會按要求工作,並將輸出寫入日誌文件
ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 successfully copied testdir test.txt successfully copied ------------------------------------------------------------------------------------- ranveer@ranveer:~$
那麼,為什麼文件的輸出沒有從 cron 中重定向到文件。
我解決了這個問題。有兩種方法:
M1
將重定向從 更改
&>>
為2>&1
。所以現在crontab -e
看起來像*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1
我相信上述方法是有效的,因為預設情況下
cron
是使用sh
來執行任務,而不是bash
因此&>>
不受sh
.M2
通過添加文件
SHELL=/bin/bash
來更改預設外殼。crontab -e
免責聲明
$$ 1 $$. 我想在@RanRag 的回答中添加腳註或附錄。
確保您的 shell 重定向語法符合
/bin/sh
. 如果您嘗試使用無效的 shell 重定向語法,/bin/sh
那麼您的命令將失敗並且您的 cron 作業將永遠不會執行。在您的
/etc/cron.d/example1
配置文件中,如果您指定了一個使用者以外的使用者root
並且該使用者的登錄 shell 不是……您仍然必須在命令/bin/bash
中使用 /bin/sh 語法。/etc/cron.d/example1
例如
如果您的使用者有 shell
csh
或zsh
為ksh
他的登錄 shell 設置。在您的/etc/cron.d/example1
配置文件中,該命令必須使用/bin/sh
語法。具體來說,任何 shell 重定向都必須是/bin/sh
語法。如果您嘗試在 中使案例如
csh
shell 重定向語法/etc/cron.d/example1
,那麼您的 cron 作業將永遠不會執行。crond
位於 at的日誌文件/var/log/cron
應說明該命令已執行,但在您的命令執行之前該命令將出錯並出現語法錯誤。語法錯誤在哪裡
crond
發出錯誤消息?該錯誤從未在
/var/log/cron
.crond
相反,預設情況下使用 . 發出任何錯誤消息/var/spool/mail/${USER}
看看是什麼錯誤。$$ 1 $$ 免責聲明
這個答案假設一個
sysv
系統
systemd
資訊可能不同具體來說,此資訊是針對
centos-6
發行版學習的,可能不適用於不同的sysv
發行版
- 我特別提到
centos-6
,因為不同的發行版可能有不同的crond
實現,不同於centos-6