Перенаправление стандартных потоков вывода

Как сообщалось в разделе про PBS, после завершения задачи информация, выведенная ей во время работа в стандартные потоки вывода и ошибок (stdout и stderr), появляется в рабочей директории в файлах с названиями вида «НазваниеСкрипта.oXXXXX» и «НазваниеСкрипта.еXXXXX» соответственно. Но имеется один нюанс: в момент запуска и работы задачи эти файлы находятся на вычислительном узле (в случае использовании нескольких узлов - на 'Mother Superior') и только после завершения задачи переносятся в её рабочую директорию. В связи с этим могут возникнуть такие ситуации:

  1. Возможно, Вы хотите при работе задачи отслеживать в реальном времени некую выводимую ей отладочную информацию, но соответствующие файлы находятся на вычислительном узле и Вам недоступны. В таком случае можно перенаправлять потоки в другой файл, находящийся в рабочей директории:
    #!/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
  2. В некоторых случаях работающая программа сама дублирует выводимую информацию в файлы логов. В таком случае, вывод в stdout/stderr не нужен и его можно подавить, перенаправив в устройство /dev/null. Можно перенаправить либо только stdout:
    ./a.out >/dev/null

    либо и stdout и stderr:

    ./a.out >/dev/null 2>&1
  3. Также бывает, что вывод программы настолько объемный, что достигает десятков гигабайт и занимает всё доступное место на вычислительном узле. В результате операционная система начинает работать некорректно, т.к. не может создавать новые файлы, а задачи других пользователей, работающие на этом же узле, не могут писать в свои логи вывода. В таком случае вывод программы необходимо или подавить или перенаправить, как описано выше.