Crontab 中未找到命令

Crontab 中未找到命令

我是 Crontab 和 Linux 的新手。我正尝试在 Crontab 中安排以下命令行指令:

speedtest-cli --csv &>> /home/pi/speedtestLog.txt

我正在尝试这样做:

*/1 * * * * speedtest-cli --csv >> /home/pi/speedtestLog.txt 2>&1

但是我得到了文件中附加的错误:

/bin/sh: 1: speedtest-cli: not found

请问我该如何解决?

答案1

上面的一些评论是正确的,但没有解释原因。

PATH 环境变量是搜索可执行二进制文件的文件系统路径列表,通常如下所示:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

PATH 变量由您使用的 SHELL 附加。在 ubuntu 中,/bin/sh 链接到默认 shell,即短跑用于系统启动脚本(即 cron)。Dash 类似于狂欢但不完全相同。在终端中,猛击默认使用。

在基于 Debian 的系统上(即 Ubuntu),PATH 由 pam_env 根据 /etc/environment 的内容初始化:

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

但是,Dash/Bash 等 shell 也会根据调用方式(交互式 shell 与登录 shell)获取 /etc/profile 和 ~/.profile,这些脚本可以在其中附加 PATH 环境变量。

尽管如此,speedtest-cli 必须位于 PATH 上的文件夹中,或者您必须使用完整路径指定它。如果您想要选项 1,您可以尝试

*/1 * * * * . /home/pi/.profile ; speedtest-cli --csv >> /home/pi/speedtestLog.txt 2>&1

NB:感谢steeldriver指出“source .profile”是bashism,而posix标准是“. .profile”。

相关内容