我有以下单元文件:
[Unit]
Description=Sends a message to a discord channel
[Service]
Type=oneshot
ExecStart=curl --header "Content-Type: application/json" --request POST --data '{"content":"MESSAGE TEXT HERE"}' https://discord.com/api/webhooks/WEBHOOK_ID_HERE/WEBHOOK_TOKEN_HERE
DynamicUser=yes
# No [Install] since this is meant to be used with a timer
{"code": 50109, "message": "The request body contains invalid JSON."}
运行 ExecStart 中的curl 命令手动将消息发布到与此 webhook 对应的 Discord 通道,同时启动服务会从 Discord 服务器生成响应。
通过 systemd 运行命令和直接运行命令有什么显着区别吗?例如,我找不到任何迹象表明 ExecStart 可能存在最大命令长度。
答案1
解决了。谢谢AB 的评论我意识到消息中有\n
s,事实证明 systemd 在执行命令之前解释了它们。转义斜杠 ( \\n
) 解决了这个问题,现在它可以工作了。