代码在终端中有效,但在 Crontab 中无效

代码在终端中有效,但在 Crontab 中无效

我不是专家,但找到了一种解决方案,可以将我的数据从 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 的条目,以免它们同时运行。

附言:由于您似乎在帖子中包含了密码,请立即更改。

相关内容