Michael H. Warfield wrote: > On Mon, 2010-01-25 at 21:50 +0100, Daniel Lezcano wrote: > > >>> apologies for the length, but how is everyone else handling this? >>> this is the last thing i need to solve before i actually start running >>> all my services on this setup. >>> >>> >> I was wondering if the kernel shouldn't send a signal to the init's >> parent when sys_reboot is called. >> > > Which still leaves open the question of telling the difference between a > halt and a reboot. My trick of using the final runlevel > in /var/run/utmp ran a foul over a gotcha in the Debian containers that > they seem to default to mounting tmpfs over /var/run and /var/lock so > you loose that information. I had to disable "RAMRUN" and "RAMLOCK" > in /etc/default/rcS in the debian images to get around that but I'm not > sure I'm happy doing that. The alternative examining /var/log/wtmp > didn't work out as reliable. OpenVZ has a similar problem and it writes > a "reboot" file that can be read but that seems inelegant as well. I > don't think anything works if someone does a "reboot -f" but I need to > test that condition yet. > > To also answer the OP's question. Here's what I use. I have a script > that runs periodically in the host. If the number of processes in a > running container is 1, then I check for the runlevel in > ${rootfs}/var/run/utmp. If that's "? 0" then it's a halt and I run > lxc-stop. If it's "? 6" then it's a reboot and I stop the container and > then restart it. I run it every 5 minutes or so or manually. It runs > fast and could be run more often. Just sucks polling things like that, > though. That script, lxc-check, is attached. >
I trick I just found: while $(true); do inotifywait /var/lib/lxc/debian/rootfs/var/run/utmp; if [ "$(wc -l /cgroup/debian/tasks | awk '{ print $1 }')" = "1" ]; then lxc-stop -n debian fi; done This command can stay always there and it will trigger a lxc-stop when the container remains with 1 process. No polling and immediate :) At the first glance, it seems to work well, but of course not compatible with upstart. linux-owop:~ # lxc-start -n debian && reset; echo "######################## exited ##########################" SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.24: No such file or directory INIT: version 2.86 booting Activating swap...done. Cleaning up ifupdown.... Loading kernel modules...FATAL: Could not load /lib/modules/2.6.32-mcr-3.18/modu les.dep: No such file or directory Checking file systems...fsck 1.41.3 (12-Oct-2008) done. Setting kernel variables (/etc/sysctl.conf)...done. Mounting local filesystems...done. Activating swapfile swap...done. Setting up networking.... Configuring network interfaces...Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/d6:c8:78:f7:09:12 Sending on LPF/eth0/d6:c8:78:f7:09:12 Sending on Socket/fallback DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 DHCPOFFER from 172.20.0.1 DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPACK from 172.20.0.1 bound to 172.20.0.10 -- renewal in 34492 seconds. done. INIT: Entering runlevel: 3 Starting OpenBSD Secure Shell server: sshd. Debian GNU/Linux 5.0 debian console debian login: root Last login: Mon Jan 25 23:28:34 UTC 2010 on console Linux debian 2.6.32-mcr-3.18 #19 Mon Jan 25 11:19:47 CET 2010 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. debian:~# poweroff Broadcast message from r...@debian (console) (Mon Jan 25 23:32:07 2010): The system is going down for system halt NOW! INIT: Switching to runlevel: 0 INIT: Sending processes the TERM signal debian:~# Asking all remaining processes to terminate...done. Killing all remaining processes...failed. Deconfiguring network interfaces...There is already a pid file /var/run/dhclient.eth0.pid with pid 187 removed stale PID file Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/d6:c8:78:f7:09:12 Sending on LPF/eth0/d6:c8:78:f7:09:12 Sending on Socket/fallback DHCPRELEASE on eth0 to 172.20.0.1 port 67 done. Cleaning up ifupdown.... mount: / is busy Will now halt. INIT: no more processes left in this runlevel ######################## exited ########################## linux-owop:~ # ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ Lxc-users mailing list Lxc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-users