$ 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
бесполезным. Как показано в этот вопрос .
У меня была другая проблема с локалью, и это решило ее для меня.
Запуск (от имени пользователя 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)