次の単位ファイルがあります。
[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コマンドを実行すると、このWebフックに対応するDiscordチャネルに手動でメッセージが公開され、サービスを開始するとDiscordサーバーから応答が生成されます。
systemdを介してコマンドを実行することと直接実行することに大きな違いはありますか?たとえば、ExecStartの最大コマンド長がある可能性があるという指示が見つかりません。
答え1
解決しました。ありがとうABのコメント私はメッセージにsがあることに気づき、\n
systemdはコマンドを実行する前にコマンドを解釈することがわかりました。エスケープされたスラッシュ(\\n
)で問題が解決され、今動作します。