Перенаправление стандартных потоков вывода
Как сообщалось в разделе про PBS, после завершения задачи информация, выведенная ей во время работа в стандартные потоки вывода и ошибок (stdout и stderr), появляется в рабочей директории в файлах с названиями вида «НазваниеСкрипта.oXXXXX» и «НазваниеСкрипта.еXXXXX» соответственно. Но имеется один нюанс: в момент запуска и работы задачи эти файлы находятся на вычислительном узле (в случае использовании нескольких узлов - на 'Mother Superior') и только после завершения задачи переносятся в её рабочую директорию. В связи с этим могут возникнуть такие ситуации:
- Возможно, Вы хотите при работе задачи отслеживать в реальном времени некую выводимую ей отладочную информацию, но соответствующие файлы находятся на вычислительном узле и Вам недоступны. В таком случае можно перенаправлять потоки в другой файл, находящийся в рабочей директории:
#!/bin/bash #PBS -l walltime=0:20:0 #PBS -l select=1:ncpus=1:mem=2000mb cd $PBS_O_WORKDIR log="$(echo $PBS_JOBID|awk -F. '{print $1}')".log ./a.out >$log 2>&1
- В некоторых случаях работающая программа сама дублирует выводимую информацию в файлы логов. В таком случае, вывод в stdout/stderr не нужен и его можно подавить, перенаправив в устройство /dev/null. Можно перенаправить либо только stdout:
./a.out >/dev/null
либо и stdout и stderr:
./a.out >/dev/null 2>&1
- Также бывает, что вывод программы настолько объемный, что достигает десятков гигабайт и занимает всё доступное место на вычислительном узле. В результате операционная система начинает работать некорректно, т.к. не может создавать новые файлы, а задачи других пользователей, работающие на этом же узле, не могут писать в свои логи вывода. В таком случае вывод программы необходимо или подавить или перенаправить, как описано выше.