Portál AbcLinuxu, 10. listopadu 2025 02:19
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.