ジョブ実行制御は、ジョブのシェルスクリプトを解釈するためにシェルを起動します。ジョブ実行制御は、ユーザがあたかもログインしたかのように以下に示すシェルのスタートアップファイルを読み込みます。
/etc/profile および ジョブ所有者のホームディレクトリの.profile
/etc/.login , ジョブ所有者のホームディレクトリの.login および 同ディレクトリの.cshrc
(ジョブ投入者のログインシェルは、パスワードエントリから確認できます。)
本来のログインでは制御端末を確保しますが、ジョブ実行制御から実行されるジョブは、ジョブ実行制御デーモンの子孫プロセスとして動作する影響で制御端末を確保しません(ジョブは制御端末を持たないプロセスとして動作します)。スタートアップファイル内で制御端末を必要とするコマンド(注)が実行された場合、ジョブが正常に動作しなくなることがあります。また、OSインストール以降、スタートアップファイルを編集しないで、そのまま使用されている場合、制御端末を必要とするコマンドが無条件で実行されるようになっていることがほとんどです。このため、ジョブのサブミットに先立ち、スタートアップファイルを変更する必要があります。
注)端末属性の定義や端末からの入力の読み込みを行う以下のコマンドが該当します。 例:ttytype, stty, tset, tty, eucset, script
ジョブ実行制御でジョブを実行すると、ジョブの起動時に環境変数ENVIRONMENTに値“BATCH”を設定します。したがって、スタートアップファイル内で、環境変数ENVIRONMENTに値が設定されている場合は、制御端末の制御や制御端末を必要とする処理を実行しないように変更してください。
.profileと.loginの変更例を以下に示します。
.profileの変更例
: : if [ "$ENVIRONMENT" = "" ] then stty erase '^H' intr ' ^C' fi : :
.loginの変更例
: : if ( $?ENVIRONMENT == 0 ) then stty erase '^H' intr ' ^C' endif : :