便利な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で出力先に合わせて整形する必要がないのであれば、大きな値にしておく方が便利そう。
ソースを参照できることが重要
エラーメッセージからソースを眺めて、問題となっている箇所を突き止めることができた。コードが公開されていないツールであれば、お手上げ。車輪の再発明をしない限り、回避できなかったであろう。
コメント