我有一个myscript.sh
调用命令的 shell 脚本,比方说mycmd
。当我从终端运行该脚本时,例如./myscript.sh
,一切正常。
但是当我将该脚本添加到 crontab 时,输出为mycmd
空。当我打电话时,/usr/local/bin/mycmd
一切myscript.sh
又恢复正常了。
那么为什么我必须使用可执行文件的绝对路径?是因为它不在$PATH
“cron-bash”中吗?
答案1
你说得完全正确 - 的环境cron
可能有一个PATH
不包括的/usr/local/bin/
。您可以通过在脚本中将该目录附加到以下位置来解决此问题PATH
:
PATH="$PATH:/usr/local/bin/"
不过,最佳实践确实是对脚本调用的所有外部二进制文件使用显式路径,以防万一(例如)方便地调用的恶意设计的程序cp
被放入PATH
before 的某处/bin
。