设置 crontab,用户问题

设置 crontab,用户问题

我想使用 设置一个 cron 作业crontab -e。此作业需要以 root 身份执行,因此我认为只需在 中添加一个条目sudo crontab -e就足够了。不幸的是,事实并非如此。

如果我直接输入以下内容,我需要执行的脚本就可以很好地运行:

sudo /home/user/./script.sh

我以用户身份登录机器user,我的 crontab 条目(sudo crontab -e)如下所示:

*/1 * * * * /home/user/./script.sh

那么,我在这里错过了什么?我觉得这个问题与当前用户的权利或类似的东西有关。


首先,我能够摆脱需要 root 权限才能执行脚本的需要。我的crontab输入(经典,crontab -e因为我不再需要 root 权限)每分钟运行一次,并且是:

* * * * * /home/user/script.sh

我的script.sh

#!/bin/bash
set -e
# Other stuff

再次,它在手动输入时有效./script.sh,但不是通过创建的 cron 作业来工作。


我知道有证据表明该脚本是由 cron 作业执行的。我按照注释中的建议将错误重定向到文件上,并在其中收到以下错误:

python: can't open file 'get-status.py': [Errno 2] No such file or directory

为了解释这一点,在我的某个时候script.sh,我使用docker来执行一些其他脚本:

docker run -v $PWD:/t -w /t [image] [command] get-status.py

再次手动操作(./script.sh)但不是来自 cron 任务


因此,我发现了问题: docker run -v $PWD:/t [...]将当前目录的内容复制到docker容器中。由于它是从cron作业执行的,因此当前目录当然不是好的目录,因此出现异常file not found

我发现这样做很难看,docker run -v /home/user/:/t [...]还有其他方法吗?

解决方案

虽然这个问题被标记为重复,但这不是同一个问题。PATH我的脚本中有一个问题,并且必须对其进行修改,因为它是由一个获取$PWD脚本路径的 cron 作业触发的。
请参阅我自己的答案。

答案1

我的问题主要在于PATH我在 cron 作业中定义的一个问题。cron
作业用于触发作业,该作业将复制当前的通过 目录进入 docker 容器docker run -v $PWD:/t [...]
由于 cron 任务不是从正确的目录触发的,我不得不修改脚本中的路径,告诉 docker 不要使用当前的目录,但脚本所在的目录居住.
正如本文所指出的回答,我把这些行修改为:

 SCRIPT=$(readlink -f "$0")
 SCRIPTPATH=$(dirname "$SCRIPT")
 docker run -v $SCRIPTPATH:/t [...]

相关内容