cronからDQLをキックした時のエラーを回避する

スポンサーリンク

便利なDQL

AWS DynamoDBを操作するのに便利なツールがDQL – DynamoDB Query Languageだ。詳しくはDQLを使ってDynamoDBをSQL操作する | Developers.IOを見てもらうとして、簡単に言うと、DynamoDBをSQLのような言語で操作するためのツールである。

Developers.IOは、AWS、iOS/Androidアプリ、ビッグデータ、Alexa等の最新技術情報からリモートワークや働き方に関する記事まで多彩なトピックを紹介するクラスメソッドのオウンドメディアです。

cronからキックするとエラー

DQLを用いた便利なscriptを書いて、定期実行させようとcronに書くと、ハマる。こんなエラーが出てしまうのだ。

Traceback (most recent call last):
  File "/usr/local/bin/dql", line 11, in 
    sys.exit(main())
  File "/usr/local/lib/python2.7/site-packages/dql/__init__.py", line 72, in main
    cli.run_command(command)
  File "/usr/local/lib/python2.7/site-packages/dql/cli.py", line 637, in run_command
    self.onecmd(command)
  File "/usr/lib64/python2.7/cmd.py", line 220, in onecmd
    return self.default(line)
  File "/usr/local/lib/python2.7/site-packages/dql/cli.py", line 575, in default
    self._run_cmd(command)
  File "/usr/local/lib/python2.7/site-packages/dql/cli.py", line 608, in _run_cmd
    width=self.conf['width'])
  File "/usr/local/lib/python2.7/site-packages/dql/output.py", line 267, in __init__
    fmt = ColumnFormat(results, ostream, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/dql/output.py", line 213, in __init__
    if self.width_requested > self.width:
  File "/usr/local/lib/python2.7/site-packages/dql/output.py", line 93, in width
    return getmaxyx()[1]
  File "/usr/local/lib/python2.7/site-packages/dql/util.py", line 31, in getmaxyx
    struct.unpack("hhhh", ioctl(0, TIOCGWINSZ, 8 * "\000"))[0:2]
IOError: [Errno 25] Inappropriate ioctl for device

まぁ、cronで動かなくなるのはよくある話で、環境変数の設定状態が変わるからなのだが、DQLの場合はちょっと違う。HOMEとかPATHとか、ありがちなところを確認、修正したけど、解決できなかった。

ドキュメントに記載されていないがこの環境変数が必要だ

cronからの実行を阻んでいたのは、この2つの環境変数。

  • LINES
  • COLUMNS

ちょうどこの部分

ターミナルから実行したときは、大抵設定されているか、出力先の操作ができるので、エラーにならない。

25行、80文字にしてもよいが、scriptで出力先に合わせて整形する必要がないのであれば、大きな値にしておく方が便利そう。

ソースを参照できることが重要

エラーメッセージからソースを眺めて、問題となっている箇所を突き止めることができた。コードが公開されていないツールであれば、お手上げ。車輪の再発明をしない限り、回避できなかったであろう。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする

この記事へのコメント

Loading Facebook Comments ...

No Trackbacks.