- Почему «команда nohup> & / dev / null» кажется «работает» в некоторых оболочках?
- linux-notes.org
- Команда nohup в Unix/Linux
- Опции nohup в Unix/Linux
- Добавить комментарий Отменить ответ
- Nohup Command in Linux Enables You to Run Commands Even After Logging Out
- What is nohup command?
- Nohup through SSH connection
- Почему «nohup command> & / dev / null» кажется «работать» в некоторых оболочках?
- Команда nohup в Unix/Linux
- Команда nohup в Unix/Linux
- Опции nohup в Unix/Linux
Почему «команда nohup> & / dev / null» кажется «работает» в некоторых оболочках?
Я отредактировал ответ на Ask Ubuntu, в котором предлагалось следующее
Когда они на самом деле имели в виду
Последний правильно перенаправляет как stderr, так и stdout на /dev/null . Я ожидал, что первый создаст файл с именем & или, что более вероятно, выдаст ошибку, как в других случаях:
Вместо этого он работает точно так же, как и первый, появляется gedit окно и сообщение об ошибке не выводится.
Я также должен отметить, что это специфическая оболочка:
bash (4.2.45 (1) -релиз), zsh (5.0.2), csh (версия пакета deb: 20110502-2) и tcsh (6.18.01): работает, как описано выше, сообщений об ошибках нет, файлы не созданы.
ksh (93u + 2012-08-01): не удается, но процесс, очевидно, запущен ( 1223 ), хотя gedit окно не появляется:
Итак, почему эта команда просто запускается без ошибок (и не создается выходной файл) в одних оболочках и завершается ошибкой в других? Что >& делает в явно особом случае nohup ? Я предполагаю, что >& /dev/null это интерпретируется как, >&/dev/null но почему пространство не вызывает ошибку в этих оболочках?
это синтаксис POSIX и такой же как:
Это выполняется nohup gedit в фоновом режиме, а затем выполнить > /dev/null перенаправление без выполнения команды.
не является синтаксисом POSIX и является csh способом перенаправления как stdout, так и stderr в / dev / null. csh не имеет 2>&1 оператора, как в Bourne, поэтому это единственный способ csh перенаправить stderr.
zsh (как часто) также предоставляет csh синтаксис, но также поддерживает оператор x>&y дублирования fd оболочки Bourne, что означает, что там есть конфликт.
перенаправляет ls stdout и stderr на file , но если файл есть 2 , у вас проблема как
означает перенаправление stdout на ресурс, на который указывает fd 2 ( dup(2, 1) ). Так что вам нужно написать это:
если вы хотите перенаправить как stdout, так и stderr of ls в файл, вызываемый 2 в текущем каталоге; или используйте стандартный синтаксис.
bash Первоначально не понимал >& , но &> вместо этого он ввел оператор, нарушая соответствие POSIX в процессе (хотя вряд ли сценарий будет использовать cmd &> xxx ).
ksh Скопировал этот оператор в ksh93t + в 2009 году, mksh в R35 в 2008 году (отключен в posix режиме), но нет >& .
bash добавлена поддержка >& в 2.05.
busybox sh добавил поддержку для обоих &> и >& в 1.13 (2008).
Ни , >& ни &> в том смысле , перенаправлять стандартный вывод и стандартный поток ошибок не POSIX / Bourne.
Если вы хотите перенаправить как stdout, так и stderr, синтаксис
Источник
linux-notes.org
nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.
Команда nohup в Unix/Linux
Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы при выходе из системы процесс продолжал работу в фоновом режиме. Например:
- command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
- Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
- & : Чтобы nohup работал в фотоновом режиме, используйте & символ.
Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:
И смотрим на процесс:
Вы можете завершить команду nohup с помощью команды kill.
Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:
В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:
Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:
Опции nohup в Unix/Linux
Чтобы вывести помощь:
Для отображения версии, используйте:
А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Источник
Nohup Command in Linux Enables You to Run Commands Even After Logging Out
Nohup stands for ‘no hang up’. It’s an extremely useful command to make your process running even after you log out.
One of the most common use can be found in running time-taking commands over SSH connection. If you think that your SSH session may drop, you can use the command with nohup in this fashion:
What is nohup command?
Nohup can be seen as a wrapper. You prefix your command with nohup like this:
Nohup‘s purpose is to intercept and prevent SIGHUP signals from reaching COMMAND.
When you prefix your command with nohup, the input will be redirected from an unreadable file ( nohup COMMAND
Note that nohup did not fork the process to the background. Nohup is only there to intercept SIGHUP signals. Once the command is running you can proceed and close your terminal. It will warn you that a process is running. Confirm you want to kill it.
When you closed your terminal, all child processes received a SIGHUP signal. Nohup prevented that signal from reaching my command. The following picture shows process information about my command while the terminal was still running.
You see the PPID? That is the parent process ID. When you requested to close the terminal, all children of PPID received a SIGHUP signal. Nohup prevented that signal from reaching our script. The parent process terminated and our script got orphaned. When a process gets orphaned, it automatically gets assign 1 (systemd or init) as a parent.
As you can see it is really not hard to demonstrate the use of nohup. Very simple command. You can fork the process in the background like this:
You can also decide where the output is redirected to like so:
Note that if you shutdown or reboot Linux system, it will kill the command. When you request a shutdown or reboot, all processes receives a SIGTERM and then a SIGKILL. Those signals are not intercepted by nohup.
Nohup through SSH connection
One use that often comes to mind right away when you learn nohup is to be able to start a process on a remote computer through SSH. Logically, running a command with nohup would allow you to logoff from your SSH connection and the process would still run.
One common problem is that sometimes SSH will “hang” while logging off. This is because SSH will often refuse to lose any data stream to and from any background processes. It will then “hang” until the process is terminated.
This issue can often be dealt with by redirecting all 3 data stream.
I hope this quick article helped you to better use SSH sessions. If you have questions or suggestions, please leave a comment below.
Источник
Почему «nohup command> & / dev / null» кажется «работать» в некоторых оболочках?
Я отредактировал ответ на Ask Ubuntu, который предлагал следующее
Когда они на самом деле означали
Последний правильно перенаправляет stderr и stdout в /dev/null . Я ожидал, что первая создаст файл с именем & или, скорее, даст ошибку, как и для других случаев:
Вместо этого он работает точно так же, как и первый, появляется окно gedit и не выводится сообщение об ошибке.
Следует также отметить, что это оболочка специфическая:
bash (4.2.45 (1) -release), zsh (5.0.2), csh (версия пакета deb: 20110502-2) и tcsh (6.18.01): работает, как описано выше, нет сообщения об ошибке, файлы не создаются.
ksh (93u + 2012-08-01): сбой, но процесс, по-видимому, запущен ( 1223 ), хотя не появляется окно gedit :
Итак, почему эта команда просто запускается без ошибок (и не создается выходной файл) в некоторых оболочках и не работает в других? Что такое >& делать в явно закрытом случае nohup ? Я предполагаю, что >& /dev/null интерпретируется как >&/dev/null но почему это не пространство, вызывающее ошибку в этих оболочках?
не является синтаксисом POSIX и является способом csh для перенаправления как stdout, так и stderr в / dev / null. csh не имеет оператора 2>&1 найденного в Bourne, поэтому это единственный способ, с помощью которого csh должен перенаправить stderr.
zsh (как часто) также предоставляет синтаксис csh , но также поддерживает оператор дублирования x>&y fd , что означает, что там есть конфликт.
перенаправляет stdout ls и stderr в file , но если файл равен 2 , у вас есть проблема как
означает перенаправление stdout на ресурс, на который указывает fd 2 ( dup(2, 1) ). Поэтому вам нужно написать:
или использовать стандартный синтаксис.
bash изначально не понимал >& , но он представил для этого оператор &> , нарушив совместимость POSIX в этом процессе (хотя вряд ли скрипт будет использовать cmd &> xxx ).
ksh скопировал этот оператор в ksh93t + в 2009 году, но не >& .
bash добавила поддержку >& в 2.05.
Ни >& nor &> как означает redirect stdout и stderr, это POSIX / Bourne.
Если вы хотите перенаправлять как stdout, так и stderr портативно, синтаксис
Источник
Команда nohup в Unix/Linux
Команда nohup в Unix/Linux
nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.
Команда nohup в Unix/Linux
Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы при выходе из системы процесс продолжал работу в фоновом режиме. Например:
command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
& : Чтобы nohup работал в фотоновом режиме, используйте & символ.
Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:
И смотрим на процесс:
Вы можете завершить команду nohup с помощью команды kill.
Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:
В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:
Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:
Опции nohup в Unix/Linux
Чтобы вывести помощь:
Для отображения версии, используйте:
А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.
Источник