我是 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”。