我用 C++ 编写了一个小工具,对其进行编译,使其可执行,并将其移至/opt/tools/bin。后者是我创建的用于存储小型自定义程序的目录。我export把它放在$PATH我的.zprofile中,它让我tool在终端中使用,并且程序运行良好。
然而,当我尝试设置一个 cron 作业tool每天运行几次时,cron 总是抱怨"/bin/sh: ./tool: No such file or directory"。
我已经尝试过这两个 cron 命令,结果相同:
0 8,12,16,20 * * * zhrdct >> /opt/tools/var/log/zhrdct.log 2>&10 8,12,16,20 * * * ./zhrdct >> /opt/tools/var/log/zhrdct.log 2>&1这里可能有什么问题?
我知道我可能可以使用工具的绝对路径,但如果可能的话,我希望它可以与速记一起使用。
Rom*_*nov 47
您应该始终使用cron可执行文件的完整路径。它在完全不同的环境中运行,并且许多可执行文件无法“访问”
0 8,12,16,20 * * * /path/to/zhrdct >> /opt/tools/var/log/zhrdct.log 2>&1
Run Code Online (Sandbox Code Playgroud)
小智 15
Cron 在非交互式 shell 中运行,因此您从常规 bash 提示符(配置的 PATH、envvars)中看到的许多功能将有所不同或完全缺失。
如果您想在 cron 中省略绝对路径,则需要从头开始配置 PATH,因为没有可以使用的隐式 PATH 变量:
PATH=/opt/tools/bin:/usr/bin:/bin
0 8,12,16,20 * * * zhrdct >> /opt/tools/var/log/zhrdct.log 2>&1
Run Code Online (Sandbox Code Playgroud)
注意:如果您的脚本包含任何其他二进制文件的简写路径,您需要确保这些路径也添加到 PATH 中。
这里有两个问题:
\n该目录/opt/tools/bin不会是作业$PATH的默认目录cron。您可以像这样添加它crontab:
PATH=/opt/tools/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin\n\n0 8,12,16,20 * * * zhrdct >> /opt/tools/var/log/zhrdct.log 2>&1\nRun Code Online (Sandbox Code Playgroud)\n一般来说,特别是在使用 时crontab,当您运行zhrdct系统时,会在列出的目录中搜索$PATH指定的命令。如果找不到,则会返回command not found您遇到的错误。但是,如果您指定命令的路径,如./zhrdct或所示/opt/tools/bin/zhrdct,则此搜索将被禁用,并且命令将按指定直接执行。
./zhrdct点的情况下代表“当前目录”。如果crontab您幸运的话,那将恰好是您的主目录 ( $HOME),但它很可能是其他某个未指定的位置。这里你有三个选择
cd "$HOME" && \xe2\x80\xa6commands to run from HOME\xe2\x80\xa6)$PATH设置已描述的搜索并运行zhrdct/opt/tools/bin/zhrdct.请注意,在任何情况下,./zhrdct如果命令位于/opt/tools/bin并且cron当前目录与其本身不同,则将失败/opt/tools/bin。
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |