2.6 on_ac_power anacron APM fix
Hello!
I am running the current stable distribution of Debian (3.0) on a
generic i386 box (with 3 ethercards installed, it makes a fine firewall).
After successfully upgrading to the 2.6 kernel, I noticed that my
daily/weekly/etc. cron jobs were no longer running! It took a while to
diagnose the problem, but I found it. Doing a quick Web search, others
have been reporting the problem, so I will post my solution here in the
hopes that it will help others.
The problem lies in the /usr/bin/on_ac_power script, which is called
from the /etc/init.d/anacron startup script. The on_ac_power script is
unable to determine the power status, so anacron assumes the worst and
assumes that the computer is on batteries, so does not start anacron!
I use APM, not ACPI, since my machine's BIOS is "from 2000 and too old".
The on_ac_power script attempts to parse /proc/apm, and fails, because
the format of the first field has changed.
/proc/apm from Linux 2.4.9-31 (an older machine that hasn't been
upgraded in some time):
1.14 1.2 0x07 0x01 0xff 0x80 -1% -1 ?
/proc/apm from Linux 2.6.3:
1.16ac 1.2 0x07 0x01 0xff 0x80 -1% -1 ?
The fix is obvious and easy: extend the regex in on_ac_power to
understand the fact that there are now *letters* in the first field, in
addition to numbers and dots.
26c26
< /^[0-9.]* [0-9.]* 0x.. 0x../ {
---
> /^[0-9a-z.]* [0-9.]* 0x.. 0x../ {
I did this, and the /etc/init.d/anacron script now properly starts
anacron without error! My cron jobs now run fine.
Since anacron is necessary to run the scripts in the daily/weekly/etc.
cron directories, this would explain why my jobs weren't being ran even
though the base "cron" program was working just fine ("cron" does not
parse those directories).
I attempted to search the Debian bugs database for this, and maybe enter
this as a bug (with fix), but couldn't get it to recognize the package
name. I tried "powermgmt-base" as reported by dpkg --search,
"powermgmt", and so on. What package name is this under, in the bugs
database?
Josh
Reply to: