我创建了一个简单的可执行脚本来为我移动文件,因为文件的名称是每天的日期,该脚本创建文件名,然后移动文件。我想使用 cron 安排它每晚运行。
当我在 bash 中运行我的脚本时,它可以工作。如果我在 cron 中准确指定路径和文件名,它也可以工作。
当我要求 cron 运行我的脚本时,就会出现问题。在我看来, cron 无法运行子进程来根据日期创建文件名。我的脚本如下:
#!/bin/bash
mv /home/folder1/$(date "+%Y-%m-%d").txt /media/folder2/folder3
这就是我在 crontab 中设置作业的方式:
0 21 * * * /home/folder1/bash_text.txt
我尝试过 $(which mv),但没有成功。 (在脚本和 cron 命令中都尝试过)
0 21 * * * $(which mv) /home/folder1/$(date "+%Y-%m-%d").txt /media/folder2/folder3
仅当我用实际文件名替换文件 $(date "+%Y-%m-%d").txt 的名称时,这才有效。
0 21 * * * $(which mv) /home/folder1/2020-04-28.txt /media/folder2/folder3
如果有人可以帮助我,请感激不尽。正如你所知,我对 Linux 很陌生,所以我正在不断学习,如果你在回复中考虑到这一点,我将不胜感激。
答案1
我没有足够的声誉来发表评论......
每种情况下的错误是什么?
请参阅此处如何查找 cron 错误:cron 错误记录在哪里?
对于第一个设置
/home/folder1/bash_text.txt
真的有执行权限吗?
如果是这样,它应该可以工作。
对于第二个设置
Kusalananda 提供的链接应该有效。
在所有情况下
在 crontab 中执行命令的默认 shell 是/bin/sh
.也许这个不适合...
你可以这样修改它:
SHELL=/bin/bash
0 21 * * * command
有关使用 crontab 的更多信息:
$ man 5 crontab
希望这可以帮助。