首页 > 解决方案 > Crontab 中的 Python 脚本:rm:无法删除,没有这样的文件或目录

问题描述

我有一个在 Linux 3.10.0-862.9.1.el7.x86_64 x86_64 上运行的 crontab。在其中,我有一个 python 脚本,它打印出要删除的某些文件,然后我将它通过管道传输到xargs rm.

例如,我会运行脚本python delete_these.py,它会打印出以下内容:

/directory/to/delete1.txt
/directory/to/delete2.txt
/directory/to/delete3.txt
/directory/to/delete4.txt

这些将通过| xargs rm在同一命令提示符下运行来删除。所以

python delete_these.py | xargs rm

该脚本在手动运行时运行良好,但是当它在 cron 上运行时,它会在运行作业时从邮件中检索到的标准输出中返回错误:

rm: cannot remove '/directory/to/delete1.txt': No such file or directory

这是我在 crontab 中输入的内容:

* * * * * ssh [confidential@stuff.com] python /location/where/my/python/script/is | xargs rm

我已经完成chmod +x /path/to/python/script并将完整的命令(减去星号,但包括ssh)在命令行上工作正常,但在 cron 上运行它会返回“没有这样的文件或目录”错误。

我确信这些文件存在,它们不是符号链接。

我已经通过附加 python ( ) 的关联绝对目录来重试它,usr/bin/但它仍然不起作用。

我不知道为什么 cron 不起作用。PATH另一个用户设置的 crontab 上的当前目录usr/bin/stuff是特定于该框的目录。我认为这将是一个PATH不同的问题,但我认为不是这种情况,因为我在命令中指定了绝对目录。

有任何想法吗?我完全被这个难住了

标签: pythonlinuxcron

解决方案


您在一台计算机上运行python命令,rm在另一台计算机上运行

您可能应该引用管道 ( |),这样它就不会分隔事物

猜测 crontab 行应该是:

* * * * * ssh [confidential@stuff.com] "python /location/where/my/python/script/is | xargs rm"

推荐阅读