Пароль должен храниться в / etc / shadow
, если они хранятся локально, верно?
В RHEL это, вероятно, связано с кешированием. Работает ли nscd
или sssd
?
Вы можете попробовать статус службы nscd
или статус службы sssd
. Если они вам не нужны и они работают, попробуйте перезапустить или остановить их с помощью service nscd / sssd restart / stop
.
Затем вы можете использовать chkconfig SERVICE off
, если они вам не нужны и не хотите, чтобы они запускались при загрузке.
Это похоже на проблему синхронизации, поскольку nohup
не имеет достаточно времени для отключения сигналов до того, как об этом подаст сигнал один из родителей. Вы можете увидеть это, добавив strace -o /tmp/s -ff
перед командой screen
, а затем в одном из файлов журнала /tmp/s.*
вы увидите
...
access("/bin/nohup", X_OK) = 0
stat("/bin/nohup", {st_mode=S_IFREG|0755, st_size=36696,...}) = 0
--- SIGHUP {si_signo=SIGHUP, si_code=SI_KERNEL} ---
+++ killed by SIGHUP +++
Вы можете упростить запуск. Это работает для меня без необходимости &
.
DISPLAY=:0 screen -d -m -L nohup zenity --info --text test
Другое решение, похоже, состоит в том, чтобы попросить родительскую оболочку использовать управление заданиями. Похоже, это заставляет его либо отключить SIGHUP в фоновом режиме, либо иным образом ждать, пока дочерний элемент nohup
будет дальше, прежде чем выйти из себя. Использование sh -cm
вместо sh -c
в исходной команде должно работать лучше. Например, это работает для меня
screen -d -m -L sh -cm 'nohup zenity --info --text test >&/dev/null & echo'
, а версия -c
— нет. bash
имеет команду disown
, которая защищает фоновое задание от SIGHUP, если используется управление заданиями, но, похоже, вам это не нужно даже без nohup
, так как это тоже работает, не оставляя процесс screen
запущенным:
screen -d -m -L sh -cm 'zenity --info --text test >&/dev/null </dev/null & echo'
Использование nohup
как всеохватывающей команды -невозможно, так как это не позволяет избавиться от nohup.out
без подавления всего вывода, а использование nohup.out
вместо screenlog.0
невозможно, поскольку nohup.out
не сохраняет возврат каретки.
Вместо использования nohup
используйте trap
оболочки. Итак, команда в OP становится:
screen -d -m -L sh -c 'trap "" HUP; DISPLAY=:0 zenity --info --text test >/dev/null 2>/dev/null &'