1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cron設定の最後には改行コードが必要だった話

Posted at

問題

新しいbatchをcron設定ファイルの最後に追加したが、crontabの読み込み時にエラーが起きてしまった..!

$ crontab cron.mainuser
"/tmp/crontab.sometemp":51: premature EOF
errors in crontab file, can't install.

原因

$ diff cron.mainuser.original cron.mainuser
48a49,51
>
> # say helloWorld
> 00 7 * * * /bin/bash /bash/batch/helloWorld.sh >> /usr/local/var/log/keiba-P5/batch/cron.log 2>&1
\ No newline at end of file

ファイルの最後に改行コードがないから!

なぜ改行コードが必要なのか??

  • UNIX系システムでは、改行コードがファイルの行を分ける区切りとして設定されている。
  • cronファイルの最後の行に改行コードがないと、cronデーモンはまだファイルが続いていると判断するが、今回は次のエントリがないため予期せぬエラー(premature EOF)になった。

解決策

hotfix: 最後の行に改行を入れてから再読み込みしたところ、無事読み込みが完了しました!
あとでbranchの更新をしておくのを忘れずにしないと..

予防策

  • テスト時にbatchを直接叩いて動作確認していたので、cronファイルにエラーがあることに気付くことができませんでした... cronの読み込み含め全部(少なくとも自分が実装した範囲は)手順をテストしておくとより安全ですね。
  • 最後に改行コードのみ追加したPRを作ったのですが、bitbucketだとdiff分かりづらい😭 git diffした結果をコメントで追加しておいた方が親切になりそうです。
  • Visual Studio Codeではファイルの最後に新しい行を自動で追加してくれる設定があるので、こちらを活用するのも良さそうです!
    image.png
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?