通过crontab任务移动文件不起作用,但如果手动执行则有效

时间:2017-01-06 16:01:41

标签: unix crontab ksh

我正在尝试移动文件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

2 个答案:

答案 0 :(得分:2)

默认情况下,使用/bin/sh运行cron作业。您可以通过在工作之前添加它来设置要使用的shell,如下所示:

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

......或者你喜欢哪种外壳。

或者,如果您的crond不支持该表示法,您可以使用其-c参数显式调用您喜欢的shell:

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

...使用反引号进行命令替换。

答案 1 :(得分:0)

创建一个简单的 Schell 脚本。在顶部添加 #!/bin/bash

#!/bin/bash
mv /your/source/file/path /target/path
# In your case something like below should work.
# make sure your path is absalute path, starting from root folder.
# mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp

然后在 crontab 中执行上面的 shell 脚本,如下所示。

13,29 * * * * /path/to/file/movescript.sh

确保您的脚本具有执行权限,并且用户可以移动文件。最好在安排之前手动运行脚本

chmod +x movescript.sh 将添加执行权限。