로그 파일에 대한 Cron 공용 IP

로그 파일에 대한 Cron 공용 IP

cron을 사용하여 내 공용 IP를 파일에 기록하고 싶습니다. 이 같은:

2021-05-17T01:11:46 99.99.99.99
2021-05-17T01:12:46 99.99.99.99
2021-05-17T01:13:46 99.99.99.99

내가 정리한 내용은 다음과 같습니다.

* * * * * { date +%FT%T | tr "\n" " "; curl https://ipinfo.io/ip -s ; echo "" ; } >> /home/mario/logs/pubip.log

sh 프롬프트에서는 작동하지만* 앞에 별표를 넣고 crontab -e에 넣으면 다음과 같은 오류가 발생합니다.

/bin/sh: 1: Syntax error: end of file unexpected (expecting "}")

운영 체제: 우분투 20.04.2 LTS

*형식을 처리하는 좀 더 우아한 방법이 있어야 합니다. 프랑켄슈타인이 부끄럽다고 생각해요.

답변1

따라서 '%' 기호로 나타납니다. 문서를 더 읽어보세요: crontab(5)

The "sixth" field (the rest of the line) specifies the command to
       be run.  The entire command portion of the line, up to a newline
       or a "%" character, will be executed by /bin/sh or by the shell
       specified in the SHELL variable of the cronfile.  A "%" character
       in the command, unless escaped with a backslash (\), will be
       changed into newline characters, and all data after the first %
       will be sent to the command as standard input.

작동이 끝난 올바른 cron 라인은 다음과 같습니다.

* * * * * { date +\%FT\%T | tr "\n" " "; curl https://ipinfo.io/ip -s ; echo "" ; } >> /home/mario/logs/pubip.log

즉, @scimerman의 제안을 따르고 가독성을 높이기 위해 이를 스크립트로 옮길 것입니다.

답변2

나는 당신의 것을 재현할 수 없습니다. cron 명령이 너무 크면 별도의 cron 스크립트로 래핑하고 crontab에서 호출하는 것이 더 우아한 접근 방식입니다.

$ cat ~/crontab.ip 
#!/bin/bash
{ date +%FT%T | tr "\n" " "; curl https://ipinfo.io/ip -s ; echo "" ; } >> ~/log.ip

내 크론탭은 다음과 같습니다

$ crontab -l
* * * * * ~/crontab.ip

작동해야합니다.

답변3

cron 시스템에 명령을 배치할 때 명령에 대한 전체 경로를 사용해야 합니다.

즉,
날짜~해야 한다/빈/날짜
~해야 한다/usr/bin/tr
곱슬~해야 한다/usr/빈/컬.
에코~해야 한다/usr/빈/에코

관련 정보