2

入力ファイルで m4 を実行するスクリプトを slurm に送信しようとしています。m4 はクラスターにインストールされており、スクリプトを単独で実行すると、すべてが期待どおりに機能します。しかし、slurm スクリプトを介して実行を slurm に送信すると、エラーが発生します。

実行したいスクリプトは次のとおりです (m4it.sh という名前)。
[デバッグの試みで PATH と SHELL を出力していることに注意してください。]

#!/usr/bin/env bash

echo "Beginning m4it.sh"
echo "PATH=$PATH"
echo "SHELL=$SHELL"
echo

m4 file.m4 > fileout.txt

そして、ここに私のスラームスクリプトがあります:

#!/usr/bin/env bash
#
#SBATCH --job-name=m4it

### Account name (req'd)
#SBATCH --account=MyAccount

### Redirect .o and .e files to the logs dir
#SBATCH -o m4it.out
#SBATCH -e m4it.err
#
#SBATCH --ntasks=1
#SBATCH --time=00:01:00
#SBATCH --mem-per-cpu=125

echo "PATH=$PATH"
echo "SHELL=$SHELL"
echo 
echo "running m4it.sh"
echo
./m4it.sh

を介してslurmに正常に送信されます

sbatch m4it.slurm

実行すると、m4it.err ログファイルに次のエラーが記録されます。

./m4it.sh: line 8: m4: command not found

PATH および SHELL 変数 (m4it.slurm および m4it.sh スクリプトによって m4it.out に出力される) は同一です。PATH にはログイン時の PATH が含まれており、予想どおり、SHELL は /bin/bash です。

PATH のディレクトリから m4 実行可能ファイルへのシンボリック リンクを含めても、このエラーが発生します。また、問題は m4 だけではありません。スクリプトは、コマンド ラインで問題なく実行されますが、コマンド「apropos」を不明なコマンドとして報告します。ただし、スクリプトは「cd」と「ls」を問題なく実行できます。

読み取り/書き込み/実行権限を確認しました。

ls -ld / /usr /usr/bin /usr/bin/m4 

次の結果が得られます。

dr-xr-xr-x. 30 root root   4096 Apr  8 11:11 /
drwxr-xr-x. 14 root root   4096 Feb 17 20:24 /usr
dr-xr-xr-x.  2 root root  36864 Apr 29 11:14 /usr/bin
-rwxr-xr-x   1 root root 212440 Jun  3  2010 /usr/bin/m4

m4it.sh スクリプトが実行されるノードはフロント ノードとは異なり、何らかの情報 (環境変数またはパス) が渡されないようです。次のように、引数 --export=ALL を使用してすべての設定をエクスポートしようとしました。

sbatch m4it.slurm --export=ALL

しかし、これもうまくいきませんでした(同じ結果)。誰でもここで助けることができますか?

4

1 に答える 1

3

対話型セッションで計算ノードにログインできました。実際、そのノードの /usr/bin はフロント ノードのものとは大きく異なり、m4 はインストールされていません。

これは、PATH 内のディレクトリからのシンボリック リンクが機能しなくなった理由も説明しています。/usr/bin/m4 を指していましたが、その計算ノードでジョブを実行した途端に /usr/bin/m4 が存在しなくなり、シンボリック リンクが無効になりました。

m4 を使用したい場合の解決策は、管理者にコンピューティング ノードに m4 をインストールするよう依頼するか、実行可能ファイルのローカル バージョンを PATH 変数に存在するホーム ディレクトリのどこかにコピーすることです。

于 2015-05-04T09:51:45.457 に答える