Запуск исполняемых файлов

Тема в разделе "Как сделать...", создана пользователем HEPB, 8 фев 2012.

  1. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    Подскажите, плиз, как можно из php запустить исполнимые файлы (которые начинаются с диррективы #!/bin/bash)?
    Есть исполнимые файлы, которые лежат в /var/etc и они запускаются по крону раз в 10 мин, что грузит сайт.
    Надо убрать их запуск с крона, а запускать через php? когда пользователь, например что-то изменил в своих данных - в этом случае они должны отработать.
    Сами php файлы лежат в подкаталогах /var/www/...
    Исполнимые файлы - /var/etc/
    Возможно ли их запустить в php?
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    115
    Симпатии:
    486
    Shell скрипты можно запустить при помощи команд exec(), system() и passthru(). Хотя, у меня есть предположение, что это не решит проблему.
     
  3. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    А что будет если зайдут 10-20 пользователей одновременно и запустят скрипт по событию?
    Если один исполняемый файл так напрягает систему, что что будет когда их запустится 10? Сайт умрёт?

    В /var/etc/ нужно будет прописать права для пользователя под которым крутится php, чтобы можно было беспрепятственно воспользоваться вышеупомянутыми функциями. Но! Это не желательно, т.к. это есть потенциальная дырка в безопасности.
     
    Viodele нравится это.
  4. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    не, скрипты надо выпонять только когда пользователь купит что-то. А это происходит крайне редко, услуга покупается на месяц вперед как правило и потом уже пользователю уже не нужно что либо запускать.
    Насчет дырки тоже так подумал. А может другой вариант попробовать?
    Скажем пользователь прописывает в таблицу флаг, что надо обновить.
    В кроне надо сделать просмотр этой таблицы и если флаг стоит, то запустить эти shell-скрипты. Крон будет раз в 5 минут читать эту таблицу и если флаг не выставлен - ничего не делать. Так вроде не будет тормозов?
    Только вот как в shell-скрипте обратиться к таблице и если флаг стоит выполнить другой shell-скрипт?
    Буду благодарен за какие-либо примеры.
     
  5. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    зачем заморачиваться с базой?
    выставляете файл-флаг в файловой системе. к примеру: /tmp/run_update_54454356, где 54454356 - ID юзера. А скриптом своим, который производит обновление смотрите если есть флаги - отрабатываем, нет - умираем. И пусть себе крутится в кроне.
    Только обязательно учтите конкуретный доступ, если будет паралельный запуск скриптов.
     
    HEPB нравится это.
  6. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    то есть в php просто создавать файл?
    Мне даже не важно какой пользователь инициировал запуск.
    Подскажите тогда пример как в shell скрипте посмотреть существует ли файл, может считать с него строки (с тексотового файла), удалить файл.
    Опять же сложность, если все пользователи будут создавать один и тот же файл, то может получиться, что php создать его не сможет или shell - скрипт его удалить.
    А если как вы предлагаете к имени файла приплюсовать id пользователя, то как просматривать такой файл shell-скриптом? Как имя файла в shell-скрипте получить? Просматирвать id юзеров, опять же доступ к базе нужен.
     
  7. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
     
  8. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    не, не понял.
    так вызывает прогу как раз таки cron, он запускает shell-скрипт
     
  9. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Узнать существует ли файл в shell:
    Код:
    #!/bin/sh
     
    if [ -f filename ]
    then
      echo Cool
    else
      echo sucks
    fi
    Если не надо, чтобы несколько раз запускался скрипт выставляешь еще один файл-флаг на то, что скрипт уже работает. Ну вот как-то так...
     
    HEPB нравится это.