направить много выходов в один и тот же файл одновременно? - PullRequest
1 голос
/ 19 января 2010

Скажите, что у меня есть скрипт bash:

#!/bin/bash
php ./listen.php 3001 3003 26 &
php ./listen.php 3002 3004 120 &

Могу ли я передать их все в один и тот же файл журнала одновременно без конфликтов?пример:

#!/bin/bash
php ./listen.php 3001 3003 26 >/tmp/log 2>&1 &
php ./listen.php 3002 3004 120 >/tmp/log 2>&1 &

Ответы [ 4 ]

4 голосов
/ 19 января 2010

> перезаписывается, поэтому вам нужно вместо >>. По умолчанию stdout буферизуется по строкам, так что это относительно безопасно. Стдерр нет. Вы должны вместо этого записать в системный журнал.

2 голосов
/ 19 января 2010

Если вы не сбрасываете стандартный вывод агрессивно, вы, вероятно, получите чередующийся вывод. Вам гораздо лучше использовать команду logger (1), которая будет выполнять каждую запись атомарно в системный журнал. Не дайте себя одурачить (как я!) Опцией -f - она ​​не позволяет вам войти в файл; скорее он записывает содержимое этого файла в системный журнал. (Спасибо Platinum Azure за исправления.)

N.B. Если в вашей системе у вас нет прав доступа к системному журналу, вы можете использовать опцию -u для записи в сокет. Вы можете использовать netcat для подключения сокета к файлу.

0 голосов
/ 20 января 2010

Теоретически вы можете:

#!/bin/bash

{ php ./listen.php 3001 3003 26 & php ./listen.php 3002 3004 120 & } >/tmp/log 2>&1

но я не знаю, насколько читабельным будет результат

0 голосов
/ 19 января 2010

Скорее всего, если каждая запись содержит новую строку, завершающуюся строкой.

Однако строки из обоих приложений будут пересекаться.Просто попробуй и посмотри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...