Xref: utzoo comp.unix.sysv386:7827 comp.unix.wizards:25433 comp.unix.internals:2713 Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!caen!hellgate.utah.edu!dog.ee.lbl.gov!nosc!crash!nusdecs!rwhite From: rwhite@nusdecs.uucp (Robert White) Newsgroups: comp.unix.sysv386,comp.unix.wizards,comp.unix.internals Subject: Re: SIGPWR signal in system v Message-ID: <1991May6.184430.2313@nusdecs.uucp> Date: 6 May 91 18:44:30 GMT References: <1991May6.112253.5344@cs.tcd.ie> Organization: National University, San Diego Lines: 55 RE: SIGPWR questions.... On the systems I use (386 and 3B2) you need special hardware attached to a UPS (uninteruptable power supply) in order for your system to support SIGPWR. You are exactly correct that there isnt any time for anything to happen in software durring a normal power failure. If you dont have a built-in UPS, or an external UPS and a builtin board, SIGPWR is never generated, the system simply dies. You know power-in=power-out, power-in=0 => activity=0 (etc.) The typical mechanisim (as implemented on a 3B2) goes like this. The UPS powers the system and has "external alarm closures" which are relays that close switches across known pins on a connector on the side of the UPS. A remote managment board has two conductor pairs that represent "loss of AC feed" and "low battery". Continuity across the pair indicates the condition is present. When a poweroutage takes place closure occurs across the LOACF pair. A sanity daemon (or other sortware hack usually running as a normal process) discovers the condition within a known period (granularity usually about one minute modified by your cron(1) period), a notification message "Warning: System Power Fault" or some such is generated and the program goes to sleep for a set interval. The interval being arbatrary and chosen based on aprox 3/4 of the available batery time. When the time is expired the program checks the hardware to see if the power outage condition is still present (clear the hardwar flag and see if the hardware resets it). If there is still no AC, the program initates a "normal" shutdown. If the "low batery" condition becomes true while the LOACF is true the software will *only then* issue SIGPWR (eh, this is supposed to be a "standard", sometimes SIGPWR will be the "normal shutdown" method mentioned above in the case of really clever/obscure system drivers) ti indicate that the AC is off and there is no way to predict how long the UPS can keep the system up, so it is going down *NOW* *ASAP* with only minimum prepration. In a tightly implemented environment the time between SIGPWR and a totally synced and quesent system should be aobut 15 seconds. (e.g. SIGPWR, 3 sec, SIGTERM, 5 sec, SIGKILL, 2 sec, sync(s) and umounts(s), halt or some such. The SIGTERM is recommended if you have lots of programs that will not catch SIGPWR, that will catch SIGTERM and which you *really* want to do their emergency shutdown routines [e.g. database apps] otherwise, just skip it and bail asap.) In the 386 environment the UPS(s) that support the Netware Feature Connectors are the ones that support this kind of environment. I don't know wether the netware feature boards are supported in any/many/most/all UNIX implementations but if they are not it should be a trival driver to implement (wrt power sensing) if the technical manual is available. Also, a software driver was posted here a week or so ago that lets a serial port use CD to indicate a power falure when the associated device is plugged into raw AC and the computer is pluuged into a UPS.