Я предложил бы регистрировать отчет об ошибках с системой отслеживания ошибок распределения, если Вы используете их сборку.
Они могут затем нарастить отчет об ошибках восходящему специалисту по обслуживанию, должен он оказываться, что он существует в ванильной сборке также.
Объяснение позади этого просто, что, так как много дистрибутивов применяют собственные патчи, если Вы не уверены, что ошибка существует в ванильной сборке, поставщик программного блока вероятен в лучшем положении смочь протестировать и возможные конфигурации (ваниль и исправленный), чем восходящий разработчик, который мог бы даже выполнять их систему на совершенно другой архитектуре, которую даже не поддерживает Ваше предпочтительное распределение.
В зависимости от сложности программы и какое необъяснимое поведение Вы видите, могло бы даже иметь смысл регистрировать ошибку против средства отслеживания ошибки распределения даже при использовании ванильной сборки программы рассматриваемые но исправленные версии каких-либо зависимостей.
Можно, конечно, нарастить ошибку восходящему специалисту по обслуживанию, если Вы не получаете ответа от специалиста по обслуживанию пакета распределения для разумного количества времени. В этом случае включайте ссылку на первоначальный доклад также для контекста и перекрестной ссылки в системе отслеживания ошибок распределения так, чтобы было легко пойти от одного до другого.
Нижняя строка: не беспокойте восходящих специалистов по обслуживанию, если это не проблема с их кодом, или специалист по обслуживанию распределения абсолютно безразличен.
Это немного сложно диагностировать, поскольку вы не указываете источник для myproc
, но я подозреваю, что ваша проблема как-то связана с " контролем TTY ". Я написал небольшой сценарий оболочки, который просто вызывает sleep 100
. Я запустил его под nohup
:
$ nohup ./sleeper > sleeper.out &
[1] 25305
-bash-3.2$ jobs
[1]+ Running nohup ./sleeper > sleeper.out &
-bash-3.2$ ps -l -p 25305
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 429624 25305 18252 0 77 0 - 15961 wait pts/0 00:00:00 sleeper
Если вы посмотрите на вывод ps
, вы увидите столбец с именем « TTY ». По крайней мере, некоторые версии nohup
(та, которую я использовал выше, взята из GNU coreutils версии 5.97, поэтому она относительно старая). Когда я вышел из оболочки bash, из которой я запустил спящий
, столбец TTY изменился на '?', Что означает, что у спящего
его не было.
Если myproc
сознательно не отключается от своего управляющего TTY, все еще возможно получить такие вещи, как сигнал SIGPIPE, если он попытается записать в стандартный вывод. Мне кажется, возможно и другое, но я не могу вспомнить или погуглить что-нибудь.
Если вы можете найти или скомпилировать " daemonize ", вы можете попробовать его. Если myproc
скомпилирован, вы можете изменить исходный код для вызова библиотечной функции daemon (3)
.
Конечно, существует возможность резервного копирования и восстановления сделанных настроек, но способ их выполнения зависит от того, какие настройки вы имеете в виду.
Обычно я бы разделил настройки на две категории:
Пользовательские настройки
Это настройки, подобные упомянутой компоновке моих панелей
, они специфичны для вашего пользователя и обычно должны храниться в /home/< имя _ пользователя >
.
Если вы резервируете содержимое /home/< имя _ пользователя >
, а затем восстанавливаете его в новой установке, все пользовательские настройки также должны быть восстановлены. Важно, что версии программного обеспечения в новой системе не старше версии программного обеспечения в старой системе, иначе они не смогут понять ваши конфигурации из-за того, что их формат слишком новый.
Системные настройки
Эти настройки не являются специфичными для пользователя, они применяются ко всей системе. Различные сервисы имеют свои настройки в различных местоположениях, но большинство из них, которые соответствуют стандартам LSB
, должны находиться в каталоге /etc
.
Это может привести к проблемам при копировании всего каталога /etc
в новую систему, особенно если версии программного обеспечения в новой системе не совпадают с версиями в старой.
Если необходимо перенести некоторые системные параметры настройки, лучше сначала найти точный файл, в котором они хранятся, и скопировать только этот файл, если версия программного обеспечения, использующего этот файл, не является одинаковой в обеих системах, я также рекомендую проверить, был ли изменен формат файла конфигурации, и при необходимости перенести формат.
Общие рекомендации
Для того, чтобы сэкономить как можно больше хлопот, я бы рекомендовал сначала установить на новую систему ту же самую версию программного обеспечения, что и на старой (только 64-битную), чтобы убедиться, что файлы конфигурации по-прежнему совместимы. После этого можно обновить его до последних версий. Таким образом, по-прежнему выполняются все процедуры модернизации файлов конфигурации.
-121--173917- diff
может быть не самым подходящим инструментом для этого. Я бы попытался написать простой сценарий, который делает именно то, что ты хочешь.
Все в памяти
Это очень простое и универсальное решение. Загружает два файла в минималистские структуры памяти, вычитает записи subset.txt
из записей all.txt
и записывает остаток.
#!/usr/bin/env python
with open('diff.txt', 'w') as diff:
for record in set(open('all.txt', 'r')) - set(open('subset.txt', 'r')):
diff.write(record)
Сохраните его в таком файле, как create _ diff.py
, затем chmod + x create_diff.py
и запустите его в каталоге, где находятся ваши два файла.
Только подмножество в памяти
Если требуется дальнейшая оптимизация для меньшего объема памяти, это также можно сделать без загрузки всех файлов в память, особенно all.txt
не требует полной загрузки в память, а может быть просто повторен один раз.
#!/usr/bin/env python
subset_txt = open('subset.txt', 'r')
subset = subset_txt.readlines()
subset_txt.close()
with open('diff.txt', 'w') as diff_txt:
with open('all.txt', 'r') as all_txt:
for line in all_txt:
if line not in subset:
diff_txt.write(line)
На основе ввода-вывода
Это должен быть самый медленный вариант, поскольку он в значительной степени зависит от ввода-вывода, но имеет низкий объем памяти, поскольку не требует загрузки в память всех файлов. Он работает независимо от того, отсортированы ли ваши файлы или нет.
#!/usr/bin/env python
diff_txt = open('diff.txt', 'w')
with open('all.txt', 'r') as all_txt:
with open('subset.txt', 'r') as subset_txt:
for all_line in all_txt:
found = False
for sub_line in subset_txt:
if all_line == sub_line:
found = True
break
if found is False:
diff_txt.write(all_line)
subset_txt.seek(0)
diff_txt.close()
Только для отсортированных файлов без дубликатов < - рекомендуется в вашем случае
Если вы уверены, что оба ваших файла упорядочены и не содержат дубликатов, это должно быть лучшим решением. Оба файла считываются только один раз, и их не нужно полностью загружать в память.
#!/usr/bin/env python
diff_txt = open('diff.txt', 'w')
with open('all.txt', 'r') as all_txt:
with open('subset.txt', 'r') as subset_txt:
subset_line = subset_txt.readline()
for all_line in all_txt:
if all_line == subset_line:
subset_line = subset_txt.readline()
else:
diff_txt.write(all_line)
diff_txt.close()
-121--75698- Для этого можно использовать в
.
Утилита
на
должна считывать команды из стандартных входных данных и группировать их как на рабочем месте , которые должны быть выполнены позже.в задании должно выполняться в отдельном вызове оболочки, выполняющемся в отдельной группе процессов без управляющего терминала, за исключением того, что переменные среды, текущий рабочий каталог, маска создания файлов и другие определяемые реализацией атрибуты времени выполнения, действующие при выполнении утилиты at, должны сохраняться и использоваться при выполнении в задании
echo myproc | at now
... будет работать, хотя в некоторых системах сначала необходимо настроить на
мониторе демона.
Для полного отсоединения процесса:
nohup ./command &
stdout и stderr будут записаны в файл с именем nohup.out, расположенный в том же каталоге, где был выполнен nohup.
Если вы хотите выполнить отсоединенную команду, имея возможность видеть вывод в терминале, используйте tail:
TEMP_LOG_FILE=tmp.log
> "$TEMP_LOG_FILE"
nohup ./command &> "$TEMP_LOG_FILE" & tail -f "$TEMP_LOG_FILE" &