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

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

設定・構築・運用
記事内に広告が含まれています。
スポンサーリンク
スポンサーリンク
スポンサーリンク

便利なDQL

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

DQLを使ってDynamoDBをSQL操作する | DevelopersIO
AWS には NoSQL データベース DynamoDBが存在します。 標準では ウェブ管理画面 AWS CLI SDK を使ったプログラム から操作することもでるものの、地味に面倒です。 今回は DQL を使ってシェル …
スポンサーリンク

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で出力先に合わせて整形する必要がないのであれば、大きな値にしておく方が便利そう。

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

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

コメント

タイトルとURLをコピーしました