วันอังคารที่ 10 เมษายน พ.ศ. 2561

CL - ตั้งเวลาทำงาน ด้วย DLYJOB

CL - ตั้งเวลาทำงาน ด้วย DLYJOB

เขียนโปรแกรม CL:Control Language - ตั้งเวลาทำงาน 

ตย. ผมจะต้องเรียกใช้ RGZPFM  (ลดขนาดข้อมูล) กับ File หลายตัว

ผมแยก File (ที่จะทำ RGZPFM) ออกเป็น 2 กลุ่ม
1.  กลุ่ม File ที่ใช้เวลาสั้น
2.  กลุ่ม File ที่ใช้เวลานาน  (File ที่มี number of records มาก)

(เจาะลึก)
Q:  รวมกันได้มั๊ย ?  ถ้าได้ ทำไมต้องแยก

A:  ได้ครับ   ที่จัดกลุ่มเพราะ  เคยพบว่า บาง File ขนาดใหญ่ มากใช้เวลา "นานมาก"
      มี File ขนาดเล็ก  รอทำงานอยู่มาก

(เจาะลึกได้อีก)
Note  การจัดกลุ่ม ในแบบ ต่างๆ
- แยกเป็น ตามกลุ่ม User  (ถ้าเสร็จ User กลุ่มนั้นก็จะใช้งานได้)
- แยกเป็น 5-10 กลุ่ม  เมื่อ เครื่องทำงานได้เร็วพอ
แต่ละ วิธีจะมีข้อดี และ ข้อเสีย  เลือกตามความเหมาะสมน๊ะครับ

กลับมาทำต่อ
ผมเขียน CL ตามกลุ่ม  ข้างต้น  (ด้านในมีคำสั่ง  RGZPFM)
จากนั้น  ก็ตั้งเวลาทำงาน "ล่วงหน้า" เช่น 
   (วันนี้ 12 เมษา เวลา 15:00)  ให้ทำ 13 เมษา 2561 เวลา 8:00
   (วันนี้ 10 เมษา)  ให้ทำ 13 เมษา 2561 เวลา 8:00

ผมเลือกให้ทำงานแบบ Batch - ไม่ต้องเปิด 1 จอ รอให้ทำงาน
       + ต้อง ตรวจสิ่งที่เรา  โยนไปได้
       + เมื่อทำงานเสร็จ  ต้องส่ง Msg ไปที่ ... (UsrPrf ของผม)

การตั้งเวลา  ในที่นี้จะพูดถึง 2 วิธี
1. CL ที่มีคำสั่ง DLYJOB   เรียกใช้งานแบบ Batch
2. ใช้ cmd WrkJobScdE  อันนี้สะดวกกว่า (Job ทำงานแบบ Batch)

เช็ค/ทบทวน ก่อน
- เมื่อ Batch ทำงานเสร็จ จะส่ง Msg ไปที่  UsrPrf  ที่สร้าง Job
  CHGMSGQ   myUSrPrf     DLVRY(*BREAK) 
- คำสั่ง SBMJOB ทั่วไป  เมื่อทำงานเสร็จ  จะไม่มี Spool JobLog ไว้
  เพิ่ม  ตั้งค่า  เพื่อให้สร้าง Spool File
 SBMJOB CMD(DSPFD FILE(*LIBL/QPRINT) OUTPUT(*PRINT))                                         
        JOB(TEST2)                                           
        LOG(4 0 *MSG)   LOGCLPGM(*YES)   LOGOUTPUT(*JOBEND)     

ทดลองเรียก  ดู  จะเกิด Break Msg ที่  UsrPrf ของเรา 
และ เกิด Spool File  การทำงานของ Job  ใน outq(QEZJOBLOG)

มาดู Code กัน
1. CL ที่มีคำสั่ง DLYJOB   เรียกใช้งานแบบ Batch

   (วันนี้ 12 เมษา เวลา 15:00)  ให้ทำ 13 เมษา 2561 เวลา 8:00
   สร้าง Code QGPL/QCLSRC     TEST1

PGM                            
DLYJOB     RSMTIME('08:00:00') 
RGZPFM     FILE(MYLIB1/MYFILE2)
ENDPGM                       
                 
     DLYJOB สามารถ ป้อนเป็น วินาทีได้  (สูงสุดได้ 27 วัน)
     เช่น  ให้รอไป  18ชม = 18*60*60 = 64800 วินาที      เปลี่ยน Code เป็น         
              DLYJOB   DLY(64800)

     สังเกต   เหมาะกับ  ตั้งเวลา  สั่งงาน ในวันนั้น หรือ  รอ 1 วัน

2. คำสั่ง WrkJobScdE   
    ใช้งานได้ ยืดหยุ่นกว่า 
         ทำ    ครั้งเดียว หรือ ทุกอาทิตย์ หรือ ทุกเดือน 
         ครั้งเดียว  = ระบุวันที่ได้
         ทุกอาทิตย์,ทุกเดือน = ทำวันไหน (1 วัน หรือ หลายวัน,ทุกวัน) จันทร์,อังคาร,...
         ทำงาน  ณ. เวลา ...
         ยกเว้น วันไหน  (เช่น วันที่ปิดเครื่อง)

   สร้าง Code QGPL/QCLSRC     TEST2

PGM                            
RGZPFM     FILE(MYLIB1/MYFILE2)
ENDPGM 

     WrkJobScdE    ป้อนรายการใหม่ F6=Add   ป้อนตามนี้

ADDJOBSCDE JOB(TEST2)                
           CMD(CALL PGM(QGPL/TEST1)) 
           FRQ(*WEEKLY)              
           SCDDAY(*TUE *THU *SAT)    
           SCDTIME('08:00:00')     

    ข้อสังเกต  อ่านแล้วได้ความหมายดี  ยืดหยุ่นกว่าด้วย  ครับ

Q: มันทำงานแบบ Batch - ถ้าทำงานขณะที่มี User ใช้งาน "มาก"
     Job นี้จะไม่ทำงานเลย  (CPU ไม่ว่างพอ)  มีทางแก้ไขหรือไม่ ?
A: เปลี่ยน  ให้มันทำงาน แบบ Interactive ซะ   ซึ่งมีหลายรายละเอียด
         เช่น  JobQ(QINTER) - ไปใช้ Pool ของ QINTER
                     แต่คุณสมบัติยังเป็น Batch อยุ่  (RunPty  ต่ำกว่า, TimeSlice  นานกว่า)
                 การแก้ไขคุณสมบัติ ให้เป็นงาน Interactive
                  - ต้องสร้าง/เรียกใช้  JobD  โดยระบุรายละเอียด 
                  ... ขอไม่อธิบายครับ เริ่มมีรายละเอียดมากไป ครับ

สำหรับงาน สำคัญ ขอให้  ทดสอบ  ก่อนใช้จริง น๊ะครับ
อื่นๆ    มีบางท่านแนะนำให้  เพิ่มคำสั่ง  sndmsg  แทรกใน CL ของเรา 
           เพื่อให้มันแจ้งว่า มันผ่าน คำสั่งอะไรไปแล้วบ้าง
           - ดู Msg  น่าจะง่ายกว่า  ไปเปิด Spool

ไม่มีความคิดเห็น:

แสดงความคิดเห็น