Cron作业设置为:
*/15 * * * * speedtest >> /home/pi/speedtest.logspeedtest脚本是:
#!/bin/sh
speedtest-cli --csv >> /home/pi/speedtest.log使用Speedtest-CLI。作业正在按时执行,但我得到的只是cron输出,看起来如下:
Jul 19 08:17:01 raspberrypi CRON[29275]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 19 08:30:01 raspberrypi CRON[29378]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 08:30:01 raspberrypi CRON[29377]: (CRON) info (No MTA installed, discarding output)
Jul 19 08:45:01 raspberrypi CRON[29430]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 08:45:01 raspberrypi CRON[29429]: (CRON) info (No MTA installed, discarding output)
Jul 19 09:00:01 raspberrypi CRON[29608]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 09:00:01 raspberrypi CRON[29607]: (CRON) info (No MTA installed, discarding output)
Jul 19 09:15:01 raspberrypi CRON[29791]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 09:15:01 raspberrypi CRON[29790]: (CRON) info (No MTA installed, discarding output)但我没有看到speedtest.log正在更新。怎么一回事?
发布于 2021-07-19 22:31:03
通过cron运行的作业,或者systemd启动脚本不运行在桌面上相同的运行时环境中。systemd启动脚本以root的形式运行。您的PATH更改或其他环境变量设置都不会自动传播到cron作业。例如,没有$DISPLAY,所以GUI程序需要特殊处理(读man xhost)。
可以为cron文件中的所有crontab作业设置环境变量,读取man 5 crontab。
查看echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias在每个环境中的结果。
由于crontab行的D13部分默认由/bin/sh解释,它的语法比/bin/bash更简单,因此我建议让command调用bash脚本(可执行、挂载,从#!/bin/bash开始),后者设置环境,然后调用所需的程序。
https://unix.stackexchange.com/questions/659083
复制相似问题