Załóżmy, że mam następujący prosty skrypt bash, które chcesz przesłać do serwera wsadowym przez slurm:przekazywać argumenty linii poleceń poprzez sbatch
#!/bin/bash
#SBATCH -o "outFile"$1".txt"
#SBATCH -e "errFile"$1".txt"
hostname
exit 0
W tym scenariuszu, ja po prostu chcę pisać wyjście hostname
na pliku tekstowego, którego pełna nazwa kontrolować za pomocą wiersza poleceń, tak jak poniżej:
login-2:jobs$ sbatch -D `pwd` exampleJob.sh 1
Submitted batch job 203775
Niestety, wydaje się, że mój ostatni argument wiersza polecenia (1) nie jest analizowany przez sbatch, ponieważ pliki utworzone nie Mam sufiks, którego szukam, a ciąg "$ 1" jest int erpreted dosłownie:
login-2:jobs$ ls
errFile$1.txt exampleJob.sh outFile$1.txt
szukałem wokół miejsc w SO i elsewhere, ale nie miałem szczęścia. Zasadniczo to, czego szukam, jest odpowiednikiem przełącznika -v
narzędzia qsub
w klastrach z obsługą Torque.
Edit: Jak wspomniano w podstawowej komentarz wątku, I rozwiązać mój problem w przykry sposób: zamiast tylko jednego skryptu, który zostanie poddany kilkakrotnie do serwera wsadowego, każda z różnych argumentów wiersza poleceń, stworzyłem "skrypt główny", który po prostu powtórzył i przekierował tę samą treść do różnych skryptów, treść każdej z nich została zmieniona przez przekazany parametr wiersza poleceń. Następnie przesłałem wszystkie te dane do mojego serwera wsadowego za pośrednictwem sbatch
. Nie odpowiada to jednak na oryginalne pytanie, dlatego woleję dodać je jako odpowiedź na moje pytanie lub oznaczyć to pytanie.
Nie znam SLURM. Czy możesz uprościć skrypt do linii 'touch outfile $ {1} .txt', abyśmy mogli spróbować odtworzyć błąd i go naprawić? –
1 jest przekazywany do skryptu, ale nie jest brany pod uwagę dla nazw plików, ponieważ slurm wstępnie przetwarza plik, aby uzyskać flagi, ale zmienna powinna być dostępna wewnątrz skryptu. Jak to zrobić w Torque? –
@WalterA: Twoje rozwiązanie działało w przypadku 'touch', to znaczy argument, który przechodzę przez' sbatch'jest poprawnie odczytywany przez skrypt jako '$ 1'. Jednak wydaje się, że '$ 1' jest przetwarzany dosłownie przez' sbatch' w przypadku '-o' i' -e', tak że kończę z plikami takimi jak 'outFile $ {1} .txt' na dysku. @CarlesFenoy: Wierzę, że masz rację w tym, co mówisz, że SLURM wstępnie przetwarza plik, aby uzyskać flagi '-o' i' -e' (patrz także moja odpowiedź na @WalterA powyżej). W Torque możesz zrobić coś takiego jak 'qsub -D 'pwd' -v var = 1 script.sh' i' $ var' ma wartość 1 w 'script.sh'. – Jason