LINUX.ORG.RU

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

 


0

1

Приветствую!

Есть таск, который запускается в фоне:

Псевдокод:

php -f cron/task/000-1.php >>cron/stdout/001-1-standard.log 2>>cron/stdout/001-1-error.log &
Таск запустился в фоне и отработал.

Нужно добавить для него локи, т.е. чтобы когда таск уже работает, не стартовать его еще раз.

Лок файл: cron/lock/.001-1.lock

Если лок существует - таск запущен прекращаем.

Запускаем таск и после того как он отработал - нужно удалить лок

Псевдокод:

php -f cron/task/000-1.php && rm cron/lock/.000-1.lock >>cron/stdout/001-1-standard.log 2>>cron/stdout/001-1-error.log &

В таком варианте таск не работает в фоне.

Как это правильно сделать?

Желательно одной строкой и без дополнительного скрипта



Последнее исправление: cheburashko (всего исправлений: 2)

Не вижу создания и проверки существования lock-файла.

По идее это должно быть вроде

ls lockfile && touch lockfile && блок команд для php с перенаправлениями && rm lockfile
alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 2)
Ответ на: комментарий от beastie

Ну как умел написал. А зачем удалять локфайл если он существует? Тогда при повторном запуске даже при работающем процессе таки запустится еще один, локфайла то нет, разве не так?

alozovskoy ★★★★★
()

Костылей тред.

anonymous
()
Ответ на: комментарий от alozovskoy

Да там свои вывихи. Тут надо решать, что важнее: или руками лок-файл при ошибках убирать или что бы скрипт сам за собой «попоу вытирал».

disclaimer: писал на коленке, там может быть ещё больше ошибок =)

beastie ★★★★★
()

Про локи

Так лучше не делать. Идеальный вариант воспользоваться таки flock-ом, и гонок нет, и мусор не нужно убирать. Если нет - (set -C ; trap «rm -f $lock» EXIT ; exec 3>$lock || exit ) - гонок не должно быть, и мусор в большинстве случаев уберётся сам.

А по оригинальному вопросу - засунь команду (до последнего &) в скобки "(...)&"

DonkeyHot ★★★★★
()

Меня одного смущает

>>cron/stdout/001-1-standard.log 2>>cron/stdout/001-1-error.log
?

Deleted
()

PHP

меня тоже смущает много чего:

2>>

rm ...>> вместо php -f ... >> ну и т.д. решал подобную задачу тоже на php - не вижу причин почему бы не сделать флажок прямо в коде php?

flock тоже хорошо. кстати, он и в php есть.;-)

и да, а зачем в шелле переназначение делать если php сам прекрасно умеет это? ;)

http://www.php.net/manual/ru/errorfunc.configuration.php#ini.display-errors http://www.php.net/manual/ru/errorfunc.configuration.php#ini.error-log

на php.ini, отличный от стандартного "-c" указывает

mumpster ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.