Если вы установили screen
на удаленных серверах, попробуйте это, что запустит команду fstrim
внутри отсоединенного сеанса screen
. Что касается ssh
, то это приведет к немедленному выходу.
ssh root@192.168.X.X screen -S fstrim -md fstrim /data
Вы можете повторно подключиться к сеансу с помощью
ssh -tt root@192.168.X.X. screen -r fstrim
и снова отключитесь с помощью Ctrl a(Ctrl )d
Причина, по которой ваша первоначальная команда не работает, заключается в том, что nohup
может видеть, что stdout не является терминалом и держит дескриптор открытым для записи. (Если бы вы использовали ssh -tt
, на удаленной стороне был бы создан псевдотерминал, и nohup
увидел бы терминал. )Путем явного перенаправления stdout вы можете заставить процесс работать в фоновом режиме, как и ожидалось:
ssh -fn root@192.168.X.X "nohup fstrim /data >nohup.out &"
Прочтите man nohup
для получения подробной информации об этом, теперь вы знаете, что ищете.
Кажется, используется флаг -S
на env
, вот так:
#!/usr/bin/env -S bash -x
...
...
работает.
Интересно отметить, что по некоторым причинам это не указано на справочной странице , хотя показано в выводе --help
.
Вероятно, это связано с тем, что env
начал иметь флаг -S
только тогда, когда coreutils был обновлен с (до8.30
). Я предполагаю, что большинство справочных страниц не обновляются и все еще содержат информацию из предыдущего8.30
(например,:8.28
не имеет флага -S
).
ссылка:
https://jhermann.github.io/blog/linux/know-how/2020/02/28/env_with_arguments.htmlhttps://linux.die.net/man/1/env