mpirun не удается распознать программу в $PATH

Можно отправить сообщение во все консоли со стеной команды.

Для отправки уведомлений под X существует, уведомляют - отправляют, который отправляет уведомление текущему пользователю на текущем дисплее. (От Вашего вопроса я предполагаю, что Вы уже знаете этого.) Можно положиться на это с некоторыми сценариями удара. В основном необходимо узнать, какие пользователи включены который X-дисплеи. После того как Вы получили эту информацию, которую можно использовать, уведомляют - отправляют как это:

DISPLAY=:0 sudo -u fschmitt notify-send "Message"

Где fschmitt является пользователем в дисплее 0. Можно проанализировать вывод, "кто" управляет для нахождения всех пользователей и их дисплеев. Вывод похож на это

[edinburgh:~]$ who
markmerk3 tty7         2010-09-23 10:59 (:0)
markmerk3 pts/1        2010-09-30 13:30 (:0.0)
fschmitt pts/2        2010-10-08 11:44 (ip-77-25-137-234.web.vodafone.de)
markmerk3 pts/0        2010-09-29 18:51 (:0.0)
seamonkey pts/6        2010-09-27 15:50 (:1.0)
markmerk3 pts/5        2010-09-27 14:04 (:0.0)
seamonkey tty8         2010-09-27 15:49 (:1)
markmerk3 pts/13       2010-09-28 17:23 (:0.0)
markmerk3 pts/3        2010-10-05 10:40 (:0.0)

Вы видите, существует два пользователя, выполняющие X сессий, markmerk3 в дисплее 0 и seamonkey в дисплее 1. Я думаю, что Вам нужно к grep для tty [0-9] * затем, гарантирует, что в конце строки существует (: [0-9]. *) избавиться от консольных логинов и извлечь идентификатор дисплея из строки между круглыми скобками.

4
06.10.2011, 13:39
1 ответ

mpirun вероятно, использование execv() звоните для запущения программы вместо execvp() один (который искал бы его в PATH).

Первое обходное решение: спросите оболочку к поиску для команды отдельно:

mpirun -np 4 $(which PyroDist) -in C005.dat -out foo

Иначе: два (не настолько хороший) обходные решения я могу думать:

  1. Использовать /usr/bin/env с аргументом PyroDist, но это требует этого mpirun позволяет передавать аргументы наряду с программой так или иначе.

  2. Запишите свою собственную обертку как:

    #!/bin/sh
    PyroDist
    

    и поместите его куда-нибудь с “фиксированным” относительным путем.

5
27.01.2020, 20:54
  • 1
    Могу я так или иначе подтверждать, что 'проблема' с execv() мятежник execvp()? Я был бы предварительный друг перекомпилировать mpi для поддержки последнего, если это помогает. Предложенные обходные решения не помогут мне, так как это - только один бит большой платформы (QIIME) и существует много программ как PyroDist и также, mpirun убран в нескольких обертках. глюк –  Martin 06.10.2011, 14:07
  • 2
    Это ударяет меня, что openmpi 1.2.7 довольно стар. На другой машине, работающей openmpi 1.4.1 нет никакой проблемы. –  Martin 06.10.2011, 14:38
  • 3
    Обновление к 1,4 решило проблему (слишком плохо, мне не разрешают ответить на мой собственный вопрос - теперь кто-то может избить меня к нему!; o) –  Martin 06.10.2011, 15:21
  • 4
    Хорошо довольный Вы могли решить его! –  Stéphane Gimenez 06.10.2011, 16:07
  • 5
    @Martin можно ответить собственный вопрос, Вы просто, должен ожидать немного (к настоящему времени, необходимо смочь сделать это). –  Gilles 'SO- stop being evil' 07.10.2011, 01:58

Теги

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