Как записать вывод команды в несколько файлов без отображения на экране

Проблема почти в том, что ваше задание cron @rebootначалось до того, как появились ваши сетевые интерфейсы up. В общем, это хорошо -задокументированный недостаток cron. Это не означает, что средство @rebootбесполезно, это просто означает, что вам нужно понять, как оно работает, и как обойти его в случае сбоя -, как это было в вашем случае (, вероятно :).

Есть как минимум 2 способа сделать это:

  1. используйте sleepв своем задании @reboot, чтобы дать сети больше времени для получения up. Ваша запись crontabбудет выглядеть примерно так::

@reboot sleep 10; /your/bash/script/as-it-is-now

Я предложил значение 10здесь, чтобы дать интерфейсу 10 секунд до прибытия up; YMMV, так что поэкспериментируйте с разными значениями.

  1. В ответ на предложение @confetti (и с благодарностью @Celada )поместите свой сценарий в /etc/network/if-up.d. Ниже приведен прототип, который может быть полезен. Обратите внимание, что он запускается только при первом запуске вашей системы (, например @reboot, а НЕ при каждом подключении сетевого интерфейса up):
  2. .

#!/bin/sh

NWKSTATUS=/var/run/the-network-is-up

# note that /var/run is a temp fs, and so a system shutdown
# will effectively erase our flag file, 'the-network-is-up'

case "$IFACE" in
lo)
# Exclude the loopback interface; we won't consider it
# as it's not a true interface. We set the flag only
# when a true network interface comes up
exit 0
;;
*)
;; esac

# if the flag file exists, we're done here
# otherwise, we'll create it

if [ -e $NWKSTATUS ]; then exit 0
else
touch $NWKSTATUS
fi

# add your script here...

Итак, -поместите все вышеперечисленное в файл (, например. setnwkstatus.sh), затем сохраните его в папке /etc/network/if-up.d/и сделайте исполняемым (т.е.sudo chmod /etc/network/if-up.d/setnwkstatus.sh)

0
24.07.2020, 16:23
2 ответа

Если вы используете zsh, эта конструкция работает:

date > file1 > file2 > file3

При работе в bashтолько file3будет содержать вывод.

0
18.03.2021, 23:17

Используйте tee, но перенаправьте «последний» стандартный вывод на/dev/null:

date | tee file file2 file3 >/dev/null
1
18.03.2021, 23:17

Теги

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