Как отобразить символы иерархии при использовании «lsblk»

$ type -a nohup
nohup is /usr/bin/nohup

Nohup не является частью синтаксиса оболочки. Это просто исполняемый файл, что означает, что вы не можете просто ввести произвольную команду и добавить к ней префикс nohup, чтобы ожидать, что она будет выполнена с игнорированием SIGHUP. В случае

nohup conda activate shuffle_pair_end_reads && python3 shuffle_pair_end_reads.py \
    fastp-filtered-merged4racon/merge_R1.fq.gz \
    fastp-filtered-merged4racon/merge_R2.fq.gz \
    >fastp-filtered-merged4racon/merged_R1_R2.fa \
    2>merged_R1_R2.log &

nohupвыполняется с аргументами conda, activateи shuffle_pair_end_reads. Все, что следует за первой &&, — это еще одна простая команда. nohupничего об этом не знает и не может контролировать его поведение.

Как написано, это означает выполнение conda activate shuffle_pair_end_readsс игнорированием SIGHUP, затем, если nohupзавершается успешно, процесс в скрипт python.

Что касается перенаправления stdin и stdout, на странице руководства об этом ясно сказано.

If standard input is a terminal, redirect it from /dev/null. If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise. If standard error is a terminal, redirect it to standard output. To save output to FILE, use 'nohup COMMAND > FILE'.

В вашем случае ввод вашей команды не перенаправляется, поэтому nohupперенаправляет его для вас с /dev/null. Точно так же nohupперенаправляет стандартный вывод на nohup.outдля вас, выдавая предупреждение (обратите внимание, что это просто предупреждение )«игнорирование ввода и добавление вывода в 'nohup.out'» и запись предупреждения в stderr.

Что касается статуса выхода nohup, , этот вопрос хорошо объясняет это. Вам нужно самостоятельно проверить, почему команда nohup conda activate shuffle_end_readsвыдает статус выхода 1.

Использование nohupкак части синтаксиса bashможет привести к забавным ошибкам. Один из самых простых,

nohup cd myfolder &&./script.sh &

завершится ошибкой со следующим сообщением, записанным в stderr:

nohup: ignoring input and appending output to 'nohup.out'

nohup: failed to run command 'cd': No such file or directory

Первая строка — просто предупреждение. Вторая строка объясняет ошибку. nohupпросто пытается вызвать свой $1как исполняемый файл, а cdникогда не является отдельным исполняемым файлом.

Когда мне нужно объединить несколько команд для nohup, я обычно использую синтаксис

nohup bash -c "long command" &

Возможно, есть способы получше, но я пользуюсь ими. В приведенном выше примере, если действительно есть причина, по которой вы не можете cdдо nohup,я сделаю

nohup bash -c "cd myfolder &&./script.sh` &

И последнее, о чем следует помнить, это то, что ваша программа может установить свои собственные обработчики сигналов, что делает nohupбесполезным. Как показано в этот вопрос .

0
24.06.2020, 15:38
1 ответ

У меня была другая проблема с локалью, и это решило ее для меня.

Запуск (от имени пользователя root):

localectl set-locale LANG=en_US.UTF-8

или:

echo "LANG=en_US.UTF-8" > /etc/default/locale (Ubuntu/Debian)
echo "LANG=en_US.UTF-8" > /etc/locale.conf (CentOS/RHEL)
0
18.03.2021, 23:24

Теги

Похожие вопросы