我不是专家,但找到了一种解决方案,可以将我的数据从 solarboiler (MK2) 发送到 domoticz。但当我将代码粘贴到 crontab 中时,只有步骤 1 会执行。
步骤1
0/1* * * * * wget -O /home/pi/resol-vbus.rs/examples/formatter/current_packets.vbus http://192.168.2.131/current/current_packets.vbus
该文件从太阳能锅炉(MK2)下载并放置在本地目录中。
第2步
0/1* * * * * cd /home/pi/resol-vbus.rs/examples/formatter/; /home/pi/resol-vbus.rs/examples/formatter/formatter -- simple-json /home/pi/resol-vbus.rs/examples/formatter/current_packets.vbus
该文件已转换为 JSON 文件。
步骤3
0/1* * * * * sshpass -p "mastermind" scp -v /home/pi/resol-vbus.rs/examples/formatter/Output.json [email protected]:/home/sander/zonneboiler
代码已传输到我的 domoticz 机器的正确目录中。
所有这些行在终端中都可以正常工作,但sudo crontab -e
只有步骤 1 有效。
有人对这个问题有经验吗?
答案1
在 中创建一个“脚本” /home/pi/resol-vbus.rs/examples/formatter/
。添加...
cd /home/pi/resol-vbus.rs/examples/formatter/
/usr/bin/wget -O current_packets.vbus http://192.168.2.131/current/current_packets.vbus
./formatter -- simple-json current_packets.vbus
/usr/bin/sshpass -p "mastermind" scp -v Output.json [email protected]:/home/sander/zonneboiler
(我假设/usr/bin/
两者都如此)您可以手动启动脚本来测试它是否有效。然后...
执行sudo vi /etc/crontab
并添加
0/1 * * * * pi cd /home/pi/resol-vbus.rs/examples/formatter/ && ./script >>/home/pi/resol-vbus.rs/examples/formatter/cron.log 2>&1
然后测试此设置。
ssh 可能需要你的
pi
用户,所以这就是为什么要使用 /etc/crontan 而不是 crontab如果这在 cron 中不起作用,则此文件将保存错误和终端中显示的所有其他文本:
/home/pi/resol-vbus.rs/examples/formatter/cron.log 2>&1
答案2
我不认为您可以依赖这 3 个 cron 条目按顺序执行。它们可能会尝试同时运行,从而导致各种问题。您可以将它们合并为一个 cron 条目中的一个长命令行。但由于这会变得有点长,更好的方法是将所有命令放在脚本中,然后从 cronfile 中运行该脚本。
假设您创建了一个名为 $HOME/bin/myformatter 的文件(使用您选择的文本编辑器)。(您可能需要mkdir -p $HOME/bin
先这样做)然后将以下内容放入其中
#!/bin/bash
fdir=/home/pi/resol-vbus.rs/examples/formatter
vbus=$fdir/current_packets.vbus
wget -O $vbus http://192.168.2.131/current/current_packets.vbus
cd $fdir
$fdir/formatter -- simple-json $vbus
sshpass -p "mastermind" scp -v $fdir/Output.json [email protected]:/home/sander/zonneboiler
使其可执行(chmod +x $HOME/bin/myformatter
)然后创建一个 cron 条目,例如
0/1 * * * * $HOME/bin/myformatter
正如 @sudodus 所说,如果您没有通过 sudo 运行原始命令,那么也不要使用 sudo 运行 crontab。
crontab -e 编辑您的 crontab。sudo crontab -e 编辑 root 的 crontab。如果您切换到您的 crontab,请确保删除 root 的条目,以免它们同时运行。
附言:由于您似乎在帖子中包含了密码,请立即更改。