以下行在cron中起作用:
* * * * * /usr/bin/mosquitto_pub -h test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING-GPING-4-GPING-GPING"
这不是:
* * * * * /usr/bin/mosquitto_pub -h test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING#GPING#4#GPING#GPING"
通知我将消息中的-
字符更改为#
。我知道#
字符需要转义,但是如何? \#
无效。
答案 0 :(得分:0)
用\转义所有#,因为#表示bash脚本中的注释,例如cron run。
\#
应该允许脚本运行。
答案 1 :(得分:0)
此说法有误:
空白行,前导空格和制表符将被忽略。第一个非空白字符为
( #
)的行是注释,不会被处理。 请注意,注释不能与cron命令放在同一行,因为它们被视为命令的一部分。类似地,注释也不能与环境变量设置在同一行。来源:
man 5 crontab
您可以使用以下方法轻松进行测试:
* * * * * echo "#" > ~/foo.txt
您的问题很可能与mosquitto_pub
有关。尽管本主题没有讲过,但是看来您的消息中只能有一个#
,应该在结尾。
另一种解决方案是创建脚本/path/to/run_cronscript.sh
,其中包含:
#!/usr/bin/env bash
/usr/bin/mosquitto_pub -h test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING#GPING#4#GPING#GPING"
,然后将您的crontab调整为:
* * * * * /path/to/run_cronscript.sh