以下でCプログラムを実行するとしましょうcrontab -e
。
15 11 * * * time /home/philip/school/a1_c_program.c > /home/philip/logs/time2execute.txt
ただし、Cプログラムでは、ユーザーはいくつかのテキストを入力する必要があります。
この状況ではどうなりますか? Cスクリプトは、再起動するまで私のコンピュータで開かれたプロセスとして残りますか?それとも時間が経つと自動的に終了しますか?
プロセスに接続して必要なテキストを入力できる場合は、timeコマンドの実行が完了し、新しく作成されたテキストファイルに内容が印刷されますか?
上記のcronjobファイルがtime2execute.txt
作成されましたが空であることを確認しました。
編集:ソースファイルの代わりにコンパイルされたCプログラムを指すようにcrontabを変更しました。このテキストファイルには、ユーザーに表示されるプロンプトテキストが含まれています。
答え1
cron
cronデーモンが実行するツールは、シェルではなく環境を取得します。これらのツールに標準入力を提供せずに、デバイスから偽の入力をcron
提供します。/dev/null
したがって、ツールに標準入力が必要な場合は、入力データを読み取ろうとするとファイル終了エラーが発生します。ツールと使用目的によって異なります。ほとんどの場合、以下を使用してプログラムを呼び出して実行するのと同じです。
programname </dev/null
ncurses
端末(アプリケーションなど)を直接読み取ろうとすると、端末初期化シーケンスは機能しません。このncurses_init()
呼び出しは誤った結果を提供します。この場合、誤った結果を処理する方法もツールによって異なります。ほとんどのツールはエラーメッセージで終了します。このエラーメッセージの処理方法は設定によって異なりますcron
(デフォルトではエラーメッセージを記録して電子メールで送信します)。
注:cron
配線が正しくないため、.c
ソースコードを直接実行しようとしています。まず、それをバイナリ実行可能ファイルにコンパイルする必要があります。また、タイムツールは出力を標準エラーに設定するため、その出力(および標準エラー)をいくつかのログファイルにリダイレクトすることをお勧めします。