Уважаемые господа, дамы если таковые имеются.Помогите разобраться с такой проблемой:
Есть определенный процесс для работы с сетью. Этот процесс использует для хранения временных файлов, например: /tmp/procname/ Однако есть необходимость запускать несколько параллельных процессов (реализовано через screen). Но проблема в том что они все пытаются писать/читать в /tmp/procname/ и в результате возникают коллизии, когда один процесс переписывает данные другого.
Хотелось как-то сделать так что бы каждый процесс считал что пишет в /tmp/procname а на самом деле эти каталоги были бы разные для каждого. Например создать что-то вроде алиаса. Пробовал жестко разделить процессы по Jail'ам, но на сервере 1 IP и все работают через него. Да и процессов параллельно нужно держать около 200. А создавать 200 jail накладно.
>[оверквотинг удален]
> временных файлов, например: /tmp/procname/ Однако есть необходимость запускать несколько
> параллельных процессов (реализовано через screen). Но проблема в том что они
> все пытаются писать/читать в /tmp/procname/ и в результате возникают коллизии, когда
> один процесс переписывает данные другого.
> Хотелось как-то сделать так что бы каждый процесс считал что пишет в
> /tmp/procname а на самом деле эти каталоги были бы разные для
> каждого. Например создать что-то вроде алиаса. Пробовал жестко разделить процессы по
> Jail'ам, но на сервере 1 IP и все работают через него.
> Да и процессов параллельно нужно держать около 200. А создавать 200
> jail накладно.Наскриптуй чруты (chroot)
>[оверквотинг удален]
>> параллельных процессов (реализовано через screen). Но проблема в том что они
>> все пытаются писать/читать в /tmp/procname/ и в результате возникают коллизии, когда
>> один процесс переписывает данные другого.
>> Хотелось как-то сделать так что бы каждый процесс считал что пишет в
>> /tmp/procname а на самом деле эти каталоги были бы разные для
>> каждого. Например создать что-то вроде алиаса. Пробовал жестко разделить процессы по
>> Jail'ам, но на сервере 1 IP и все работают через него.
>> Да и процессов параллельно нужно держать около 200. А создавать 200
>> jail накладно.
> Наскриптуй чруты (chroot)Думал об этом, но это так же придется копировать всю структуру файловой системы в новый chroot, а процессов много и так же много будет копий. А симлинки из под чрута не видны. Или я что-то делаю не так?
>[оверквотинг удален]
>>> /tmp/procname а на самом деле эти каталоги были бы разные для
>>> каждого. Например создать что-то вроде алиаса. Пробовал жестко разделить процессы по
>>> Jail'ам, но на сервере 1 IP и все работают через него.
>>> Да и процессов параллельно нужно держать около 200. А создавать 200
>>> jail накладно.
>> Наскриптуй чруты (chroot)
> Думал об этом, но это так же придется копировать всю структуру файловой
> системы в новый chroot, а процессов много и так же много
> будет копий. А симлинки из под чрута не видны. Или я
> что-то делаю не так?всю - не надо, только необходимую программе.
можно сделать одну базовую файловую структуру и копировать её скриптом при запуске.а можно разрабов пнуть и сделать по-нормальному.
>[оверквотинг удален]
>>>> Jail'ам, но на сервере 1 IP и все работают через него.
>>>> Да и процессов параллельно нужно держать около 200. А создавать 200
>>>> jail накладно.
>>> Наскриптуй чруты (chroot)
>> Думал об этом, но это так же придется копировать всю структуру файловой
>> системы в новый chroot, а процессов много и так же много
>> будет копий. А симлинки из под чрута не видны. Или я
>> что-то делаю не так?
> всю - не надо, только необходимую программе.
> можно сделать одну базовую файловую структуру и копировать её скриптом при запуске.Как вариант можно попробовать.
> а можно разрабов пнуть и сделать по-нормальному.
Уже, но разрабы далеко и пока вестей от них мало.
> временных файлов, например: /tmp/procname/ Однако есть необходимость запускать несколькоЕсли програма вдруг берёт честь /tmp из переменной TMP окружения, то ...
Если програма вдруг берёт честь procname/ из имени процесса, то ...И то, и другое проверяется научным методом тыка.
>> временных файлов, например: /tmp/procname/ Однако есть необходимость запускать несколько
> Если програма вдруг берёт честь /tmp из переменной TMP окружения, то ...TMP не берет, проверено. (В первую очередь)
> Если програма вдруг берёт честь procname/ из имени процесса, то ...А вот это как проверить?
>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
> А вот это как проверить?Бинарник переименовать, хардлинка д.б.достаточно.
>>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
>> А вот это как проверить?
> Бинарник переименовать, хардлинка д.б.достаточно.Не не помогает. Видимо путь жестко "зашит" в программе.
>>>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
>>> А вот это как проверить?
>> Бинарник переименовать, хардлинка д.б.достаточно.
> Не не помогает. Видимо путь жестко "зашит" в программе.1. LD_PRELOAD
2. отредактровать путь
3. отредактировать прогу
>>>>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
>>>> А вот это как проверить?
>>> Бинарник переименовать, хардлинка д.б.достаточно.
>> Не не помогает. Видимо путь жестко "зашит" в программе.
> 1. LD_PRELOADЧто это?
> 2. отредактровать путьТак оно и нужно. Но как это сделать?
> 3. отредактировать прогуВариант рассматривается, но ввиду удаленности разрботчиков не сильно активно.
>>>>>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
>>>>> А вот это как проверить?
>>>> Бинарник переименовать, хардлинка д.б.достаточно.
>>> Не не помогает. Видимо путь жестко "зашит" в программе.
>> 1. LD_PRELOAD
> Что это?http://lmgtfy.com/?q=unix+ld_preload
>> 2. отредактровать путь
> Так оно и нужно. Но как это сделать?незнаю как во фряхе делать mount --bind -- но можно 100500 разделов замонтирjвать в один каталог попутно запуская просессы, вариант с симлинком должен прjйти -- в случае еслb прога не открывает и закрывает постоянно
>> 3. отредактировать прогу
> Вариант рассматривается, но ввиду удаленности разрботчиков не сильно активно.бинари тоже можно -- при определённой сноровке -- включая такие изощерённые способы как elfsh
> Не не помогает. Видимо путь жестко "зашит" в программе.Название программы секрет или она личного производства?
>>>> Если програма вдруг берёт честь procname/ из имени процесса, то ...
>>> А вот это как проверить?
>> Бинарник переименовать, хардлинка д.б.достаточно.
> Не не помогает. Видимо путь жестко "зашит" в программе.Если путь точно зашит в прогу в абсолютном виде, то берешь бинарь и говоришь:
sed -i .orig 's#/tmp/procname#/tmp/procna01#g' твой-бинарь
ВАЖНО! Длина строки должна остаться такой же!!! Иначе получишь нерабочую прогу.
ну или посмотри в бинарь на предмет как точно там путь зашит:
strings твой-бинарь | grep tmp
И соотв. подправь sed.
ВАЖНО! Длина строки должна остаться такой же!!! Иначе получишь нерабочую прогу.
Вот, к примеру, что получим с sed:
for ((i=1; i <= 20; i=$i+1)); do j=`printf "%02d" $i`; sed "s/usage:/UsA$j:/g" /usr/bin/sed > test.$i; done
./test.20 -?
UsA20: sed ..../test.2 -?
UsA02: sed ...
И т.д. Идея понятна? Можно создать сколько угодно экземпляров твоей программы с разными именами зашитого в прогу каталога и разными именами самой программы.ВАЖНО! Длина строки должна остаться такой же!!! Иначе получишь нерабочую прогу.
[удалено]
Проблема решилась. Разработчики откликнулись и исправили прогу. Всем спасибо за помощь.