我有一个脚本(logtemps.sh)来记录我的Raspberry Pi的温度,如下所示
TIME1=$(date +%s)
TEMP1=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s
TIME2=$(date +%s)
TEMP2=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s
TIME3=$(date +%s)
TEMP3=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s
echo "$TIME1,$TEMP1"
echo "$TIME2,$TEMP2"
echo "$TIME3,$TEMP3"
运行./logtemps.sh
给出(例如):
1499618156,55843
1499618157,56382
1499618158,55843
这是按计划进行的。
我设置了一个 cronjob 每隔一分钟运行一次,并temps.txt
使用 .txt 将输出附加到文件中*/2 * * * * /home/pi/temp-cron/logtemps.sh >> /home/pi/temp-cron/temps.txt 2>&1
。
然而,当我看到temps.txt
它给出
1499618041,
1499618042,
1499618043,
1499618161,
1499618162,
1499618163,
第二个变量($TEMPn)似乎被完全忽略。
cronjob 是用 来安装的crontab -e
,所以它应该以我的用户 ( pi
) 身份运行,所以我看不出自己不运行它会有什么区别。
答案1
我logtemps.sh
使用将$(<file)
的内容读file
入变量。这是一个特点巴什,但是 cron 执行命令嘘。要解决此问题,请将 crontab 中的行更改为
*/2 * * * * bash /home/pi/temp-cron/logtemps.sh >> /home/pi/temp-cron/temps.txt 2>&1
(添加bash
)
或者添加#!/bin/bash
到脚本的顶部,以便它始终在bash
.
看好处4)更新到版本 8 Unix,其中 #!被介绍了。
太长了; Cron 在 下执行sh
,脚本bash
仅使用命令,总是 shebang。