コマンドはcrontabでは失敗するが、ターミナルでは動作する

コマンドはcrontabでは失敗するが、ターミナルでは動作する

確認しましたこの質問crontab の失敗について。

このコマンドを実行してコマンドをキャプチャしhtop、そのスナップショットをHTML形式で作成しています(htop を人間が読めるファイルへ出力):

/bin/echo q | /usr/bin/htop | /usr/bin/aha --black --line-fix > /tmp/htop.html

このコマンドはターミナル上で正しく動作し、環境変数に依存しません。このコマンドを cronjob として追加すると、空の HTML ファイルが生成されます。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- This file was created with the aha Ansi HTML Adapter. http://ziz.delphigl.com/tool_aha.php -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xml+xhtml; charset=UTF-8" />
<title>stdin</title>
</head>
<body style="color:white; background-color:black">
<pre>
</pre>
</body>
</html>

経由で出力をキャプチャできない理由は何でしょうかcron?

答え1

htopTERMデータを出力するには変数を eg に設定する必要があるのでxtermxtermcron 行でこの変数を設定するだけです。例:

@hourly echo q|TERM=xterm htop|aha --black --line-fix >/tmp/htop.html

コマンドが本当に環境変数に依存しません (多くの場合cron、 で問題を引き起こします。リンクした質問を参照してください)。 をenv -i「空の環境から開始する」ために使用します。

$ env -i htop
Error opening terminal: unknown.

diffのとターミナルの環境を組み合わせると、cronコマンドに必要な変数をテストするのに適した方法になります。htop実際、のみ必要なものTERM:

env -i TERM=xterm htop

関連情報