ornitolog
25.01.2017, 12:42:32
Witam, mam napisane crony w php i uruchamiam je w ssh ze wzgledu na bardzo dlugi czas wykonywania. Niestety robie to recznie a chcialbym zautomatyzowac, pytanie tylko jak je wpisac do cronjobs jezeli nie ma max czasu wykonywania skryptu, on moze chodzic minute a moze i godzine. Jest jakas mozliwossc zeby z poziomu php sprawdzac czy skrypt jest uruchomiony ? Moze macie jakis inny pomysl zeby to kontrolowac ? Musi sie wykonywac tylko raz w jednym czasie i musi sie uruchamiac cyklicznie.
Myslalem o tym zeby wpisywac w plik informacje gdy sie wykonuje, i wpisywac gdy sie wykona ale jezeli bedzie po drodze jakis blad albo die() to lezy :/
Mlodycompany
25.01.2017, 13:45:32
możesz sobie zapisywać gdzieś pid odpalanego procesu i przy każdym odpaleniu sprawdzać czy jest uruchomiony proces w systemie z tym pidem i jeśli jest to robić die
lukaskolista
25.01.2017, 13:56:24
Trzeba zrobić prostą blokadę. Gdzieś zapisujesz coś, co świadczy o tym, że skrypt jest uruchomiony. W cronie ustawiasz uruchamianie np. co minutę. W skrypcie na podstawie tego czegoś zapisanego gdzieś tam sprawdzasz, czy skrypt pracuje. Jak pracuje, to przerywasz jego wykonywanie. Po zakończeniu wykonywania skryptu usuwasz taką blokadę.
Tym czymś gdzieś tam może być w najprostszym przypadku utworzenie pliku o nazwie unikalnej dla danego skryptu, ale niezmieniającej się, np. dla skryptu accountUpdate możesz tworzyć plik o nazwie account-update.
Powyższe rozwiązanie jest najprostszym z możliwych i ma sporo ograniczeń, ale się sprawdza. Ważne jest, aby w jakiś sposób przechwytywać błędy skryptu powodujące kończenie jego pracy w celu usunięcia blokady - inaczej plik zawsze będzie istniał i skrypt się już nie uruchomi.
Pyton_000
25.01.2017, 14:25:04
użyj do tego programu flock i ustaw cron np co 5 min:
Kod
flock -xn /home/vagrant/forever.lock -c php -f ./script_path/script.php