2017-01-06 29 views
0

我試圖移動文件crontab以獲取該計劃,但crontab未移動文件。如果我手動執行它,它會起作用......你知道可能的原因是什麼嗎?這是我有:通過crontab任務移動文件不起作用,但如果手動執行,則會起作用

13,29 * * * * mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 

如果我執行下面的行它的工作沒有任何問題:

mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 
+0

在「mv」之前嘗試一個「set -x;」以準確查看運行的命令--iirc一些cron實現自己執行(semibroken)解析而不是盲目地將字符串傳遞到shell – loreb

+0

但是如何設想看看它是如何用cron執行的,輸出不會顯示在控制檯中。 –

+0

「set -x」會在執行時輸出命令,而cron應該將這些命令郵寄給您 - 嘗試添加一個每分鐘運行一次的「回顯測試」,等待一分鐘,您應該在/ var/mail中發送郵件/(或任何你配置) – loreb

回答

2

默認情況下,cron作業使用/bin/sh運行。您應該能夠設置外殼由只是你的工作怎麼樣在這之前將它的使用方法:

SHELL=/bin/bash 
13,29 * * * * mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 

...或任何殼你喜歡。

另外,如果你的crond不支持該符號,你可以明確地調用自己喜歡的外殼,使用其-c參數:

13,29 * * * * bash -c 'mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp' 

通知封閉單引號。它們是必需的,因爲整個命令必須是shell的單個參數。

另一種方法是將您的命令來使用普通的舊的Bourne shell(SH)語法,我相信應該是:

13,29 * * * * mv `grep -l "File was not FOUND" /home/user/test*` /home/user/temp 

...使用命令替換反引號。

+0

當我這樣做,我得到這個錯誤: SHELL =/bin/bash crontab:上一行的錯誤;行中發現的意外字符。 crontab:在輸入中檢測到錯誤,沒有生成crontab文件。 –

+1

有趣。我增加了另一種獲得相同結果的方法。出於好奇,你在使用什麼平臺? – spectras

+0

這是SunOS 5.10 Generic_150400-28 –

相關問題