Spesso vengono schedulati dei riavvii (IPL) del sistema IBM i, oppure vengono programmati durante i periodi di inattività, come i weekend.
Ma una volta che il sistema è ripartito, ci piacerebbe sapere quando è successo. E' un'informazione che può servirci per capire come mai certe cose non hanno funzionato, oppure per spiegare come mai abbiamo avuto certi allarmi in una determinata ora, o ancora per conoscere l'effettiva durata di un IPL e usarla per migliorarne la programmazione.
Come facciamo a conoscere quando il sistema è ripartito?
Tra i vari metodi che abbiamo trovato tra i suggerimenti, c'è quello di vedere il momento in cui è entrato in macchina il job di sistema SCPF
Cos'è il Job SCPF (Start Control Program Function)?
Dal sito IBM ecco la definizione del job SCPF: The SCPF system job is the central job during the operating system IPL, providing the environment and directing the functions necessary to start the operating system. SCPF starts all the other system jobs, (except QLUS, which is started by QSYSARB) and brings the system up to a usable state. SCPF remains active after the IPL providing an environment for the running of low-priority and possibly long-running system functions. SCPF also runs during the PWRDWNSYS processing and is the job that terminates the machine processing.
Quando è partito questo il Job SCPF?
Nel momento in cui parte questo job, possiamo considerare il sistema attivo e funzionante. Per questo motivo useremo la data e ora di attivazione del job SCPF per determinare quando il nostro as/400 è ripartito. Vedremo ora quanti modi abbiamo per trovare questa informazione:
SELECT message_timestamp FROM TABLE(QSYS2/JOBLOG_INFO('000000/QSYS/SCPF')) A order by ordinal_position asc limit 1 offset 0
select job_name FROM TABLE (QSYS2/ACTIVE_JOB_INFO()) X where job_name like '%SCPF%'
using System using System.Collections.Generic; using System.Linq; using System.Configuration; using com.ibm.as400.access; using java.util; using java.text; using System.IO; using java.sql; using System.Data.SqlClient; using System.Xml.Serialization; using System.Xml; using System.Text; using System.Diagnostics; using System.Threading; using System.Timers; namespace jt400Test { class Program { private static AS400 system; static void Main(string[] args) { system = new AS400(); system.setSystemName("SYSTEMNAME"); system.setUserId("xxxxxx"); //utente con diritti *ALLOBJ system.setPassword("xxxxxxx"); CommandCall command = new CommandCall(system); try { JobList list = new JobList(system); list.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, "SCPF");// ritorna il job SCPF list.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, java.lang.Boolean.FALSE); Enumeration items = list.getJobs(); String date = String.Empty; while (items.hasMoreElements()) { Job job = (Job)items.nextElement(); job.loadInformation(); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); date = formatter.format(job.getJobEnterSystemDate()); //la data di quando il job SCPF è partito break; } Console.WriteLine("Last IPL " + date); } catch (Exception e) { Console.WriteLine("Command " + command.getCommand() + " issued an exception!"); Console.WriteLine(e.Message + " - " + e.StackTrace); } system.disconnectService(AS400.COMMAND); } } };