ログファイルの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 "}")

オペレーティングシステム:Ubuntu 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/bin/エコー

関連情報