Os.system 不会将 cron 警报中的消息推送到 cronitor?

Os.system doesn't push message in cron alert to cronitor?

我是 运行 一个使用 cron 作业的 python 脚本。当脚本运行时,它会提示它已完成或失败。它应该将消息连同完成 ping 一起发送到 cronitor。 link 的示例如下:

 https://cronitor.link/p/id/key?state=complete&msg='Success'

当我将 link 放入搜索栏并按 Enter 键时,该消息显示在 cronitor 中。但是,当我尝试通过脚本在 运行 link 时打印消息时,它不起作用。 Cronitor 收到成功完成但未显示任何消息的 ping:

 cron_alert = "/usr/local/bin/curl --silent https://cronitor.link/p/id/key?state=complete&msg='Success'"
 os.system(cron_alert)

我尝试删除“--silent”,但没有任何效果。有想法该怎么解决这个吗?谢谢

您的命令包含未转义的 &os.system 使用的 shell 将其解析为在后台运行 curl 的命令终止符。你需要转义它,例如

 cron_alert = \
   "/usr/local/bin/curl --silent \"https://cronitor.link/p/id/key?state=complete&msg='Success'\""

但更好的办法是停止使用 os.system 并改用 subprocess.run

import subprocess


subprocess.run(["/usr/local/bin/curl",
                "--silent",
                "https://cronitor.link/p/id/key?state=complete&msg='Success'"])

完全绕过了 shell。

最好使用像 requests 这样的库从 Python 发送请求,而不是分叉一个新进程。

import requests

requests.get("https://cronitor.link/p/id/key",
              params={'state': 'complete', 'msg': "'Success'"})

(在所有情况下,API 是否真的需要在 Success 周围加上单引号?)