(Bash) String для выполнения формируется правильно, но оценивается с ошибками

Пароль должен храниться в / etc / shadow , если они хранятся локально, верно?

В RHEL это, вероятно, связано с кешированием. Работает ли nscd или sssd ?

Вы можете попробовать статус службы nscd или статус службы sssd . Если они вам не нужны и они работают, попробуйте перезапустить или остановить их с помощью service nscd / sssd restart / stop .

Затем вы можете использовать chkconfig SERVICE off , если они вам не нужны и не хотите, чтобы они запускались при загрузке.

1
05.09.2018, 08:02
2 ответа

Это похоже на проблему синхронизации, поскольку 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'
1
27.01.2020, 23:42

Использование 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 &'
0
27.01.2020, 23:42

Теги

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