Регистрация времени выполнения фонового задания

Если вы добавите опцию загрузки console=tty1, вывод systemd должен сохраняться на tty1.

Тем не менее, я думаю, что systemd.show _status=false ближе к тому, что вы просили.

console=tty1также будет хранить сообщения ядра на tty1.[ *] Таким образом, вы можете пропустить полезные предупреждения или сообщения об ошибках. Если ядро ​​полностью выйдет из строя, оно может записать очень полезную информацию на tty1, но вы не сможете переключиться обратно, чтобы увидеть ее. (Справедливости ради, у вас может возникнуть та же проблема при использовании графического интерфейса ).


[ *] Linux :Разница между /dev/console, /dev/tty и /dev/tty0

4
19.03.2020, 10:02
3 ответа

[это предполагает, что вы хотите, чтобы вывод timeтакже направлялся в log.txt, что неясно из вашего вопроса]

Просто не используйте nohup.

nohupне делает ничего особенного, кроме игнорирования сигнала SIGHUP, перенаправляя stdout и stderr в файл и --только в некоторых вариантах, например nohupиз GNU coreutils --, перенаправляя стандартный ввод из /dev/null, открытого в запись -только режим .

Все это можно легко сделать из оболочки:

{ trap '' HUP; time bash -x your_script args... ; } > log.txt 2>&1 0>/dev/null &

Или безопаснее, если запускать из сценария или если вы не планируете когда-либо возвращать команду на передний план с помощьюfg:

(trap '' HUP; time bash -x your_script args... 0>/dev/null &) > log.txt 2>&1

(Вы можете опустить 0>/dev/null, если не хотите эмулировать эту особенность GNU nohup ).


Конечно, вы можете использовать синтаксический трюк из первого примера и с nohup, если по какой-то непостижимой причине вы приписываете nohup магические свойства:

{ time nohup bash -x your_script args... ; } > log.txt 2>&1 &
2
28.04.2021, 23:20

Можно просто использовать:

time yourscript.sh

Но если это не работает для вас, вы можете обернуть содержимое скрипта, например:

STARTTIME=$(date +%s)
#command block that takes time to complete...
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
2
28.04.2021, 23:20

Просто timeпроцесс nohup:

$ time nohup bash -x ~/scripts/foo.sh 
nohup: ignoring input and appending output to 'nohup.out'

real    0m10.011s
user    0m0.005s
sys 0m0.006s

foo.shпросто имеет sleep 10в качестве примера.

2
28.04.2021, 23:20

Теги

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