![Curl은 systemd와 명령줄을 통해 호출할 때 다른 결과를 생성합니다.](https://linux55.com/image/218204/Curl%EC%9D%80%20systemd%EC%99%80%20%EB%AA%85%EB%A0%B9%EC%A4%84%EC%9D%84%20%ED%86%B5%ED%95%B4%20%ED%98%B8%EC%B6%9C%ED%95%A0%20%EB%95%8C%20%EB%8B%A4%EB%A5%B8%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같은 단위 파일이 있습니다.
[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에서 컬 명령을 실행하면 이 웹후크에 해당하는 Discord 채널에 수동으로 메시지가 게시되고, 서비스를 시작하면 Discord 서버에서 응답이 생성됩니다.
systemd를 통해 명령을 실행하는 것과 직접 실행하는 것 사이에 큰 차이가 있습니까? 예를 들어, ExecStart에 대한 최대 명령 길이가 있을 수 있다는 표시를 찾을 수 없습니다.
답변1
해결되었습니다. 감사해요AB의 코멘트나는 메시지에 s가 있다는 것을 깨달았고 \n
systemd는 명령을 실행하기 전에 명령을 해석하는 것으로 나타났습니다. 이스케이프된 슬래시( \\n
)로 문제가 해결되었으며 이제 작동합니다.