Portál AbcLinuxu, 1. června 2025 05:43
Pouštím v CRONu každé 2 minuty úlohu, která zpracovává poměrně složitý SQL job nad Oracle DB.
*/2 06-18 * * 1-5 su - oracle -c "sqlplus @/usr/local/bin/job.sql"
Job běží cca 10-20 sekund a čas si loguji do DB.
Bohužel při extrémním zatížení DB (které neovlivním) běží skript i 5 minut.
OTÁZKA:
Mohu nějak zařídit, aby se úloha v cronu nespustila znovu, dokud nedoběhla její předchozí instance?
Něco podobného jako je ve WIN-plánovači úloh.
Jediné co mne napadá, že si budu ukládat a hlídat "běží/neběží" až v DB.
Díky, Standa
Řešení dotazu:
Díky,
právě - jediné čeho jsem se bál je situace, kdy by skript padnul, nebo by ho někdo killnul.
Zkusím to nějak realizovat, Díky.
Aha, taková možnost mne ani nenapadla - SQL umím obstojně, ale nejsem ORACLE specialista.
Je tam někde možnost spustit max. jednu instanci?
Syntaxi si dohledám, díky.
drop table t; create table t(sid number,dt date,descr varchar2(10)); create or replace procedure p is begin insert into t values(sys_context('userenv','sid'),sysdate,'start'); dbms_lock.sleep(90); insert into t values(sys_context('userenv','sid'),sysdate,'stop'); end; / var job number exec dbms_job.submit(:job,'begin p;end;',sysdate,'sysdate+1/24/60') commit; ... select sid,to_char(dt,'DD.MM.YYYY HH24:MI:SS'),descr from t order by dt 157 16.09.2011 13:32:32 start 157 16.09.2011 13:34:02 stop 157 16.09.2011 13:34:02 start 157 16.09.2011 13:35:32 stop 157 16.09.2011 13:35:32 start 157 16.09.2011 13:37:02 stop exec dbms_job.remove(:job) drop procedure p; drop table t;
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.