Running the same command with strace actually shows the command fails. The relevant part:
----------------------- % snip % ----------------------- stat("/var/lib/lxc/mycontainer/config", {st_mode=S_IFREG|0644, st_size=808, ...}) = 0 pipe([3, 4]) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23100 close(4) = 0 read(3, "\377\377\377\377", 4) = 4 close(3) = 0 wait4(23100, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23100 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23100, si_status=1, si_utime=0, si_stime=0} --- socket(PF_LOCAL, SOCK_STREAM, 0) = 3 connect(3, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 40) = -1 ECONNREFUSED (Connection refused) connect(3, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 110) = -1 ECONNREFUSED (Connection refused) close(3) = 0 stat("/var/lib/lxc/mycontainer/config", {st_mode=S_IFREG|0644, st_size=808, ...}) = 0 open("/run/lxc/lock//var/lib/lxc/mycontainer", O_RDWR|O_CREAT, 0600) = 3 fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0 pipe([4, 5]) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23101 close(5) = 0 read(4, "\377\377\377\377", 4) = 4 close(4) = 0 wait4(23101, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23101 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23101, si_status=1, si_utime=0, si_stime=0} --- socket(PF_LOCAL, SOCK_STREAM, 0) = 4 connect(4, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 40) = -1 ECONNREFUSED (Connection refused) connect(4, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 110) = -1 ECONNREFUSED (Connection refused) close(4) = 0 open("/var/lib/lxc/mycontainer/lxc_snapshots", O_RDONLY) = -1 ENOENT (No such file or directory) geteuid() = 0 pipe2([4, 5], O_CLOEXEC) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23102 close(5) = 0 fcntl(4, F_GETFL) = 0 (flags O_RDONLY) fstat(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8da4aff000 lseek(4, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) read(4, "", 4096) = 0 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23102, si_status=127, si_utime=0, si_stime=0} --- close(4) = 0 munmap(0x7f8da4aff000, 4096) = 0 wait4(23102, [{WIFEXITED(s) && WEXITSTATUS(s) == 127}], 0, NULL) = 23102 stat("/dev/vglxc/mycontainer", {st_mode=S_IFBLK|0660, st_rdev=makedev(252, 0), ...}) = 0 open("/sys/dev/block/252:0/dm/uuid", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8da4aff000 read(4, "LVM-AGQfFleAZmtwXaRlf3qusphA68nyKV56qCiz847f5Jd9gR5Em5pzaJdSfo24s4br\n", 4096) = 69 close(4) = 0 munmap(0x7f8da4aff000, 4096) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23103 wait4(23103, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23103 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23103, si_status=1, si_utime=0, si_stime=0} --- write(2, "lxc_container: ", 15) = 15 write(2, "lxccontainer.c: lxcapi_destroy: 2073 ", 37) = 37 write(2, "Error destroying rootfs for mycontainer", 44) = 44 write(2, "\n", 1) = 1 fcntl(3, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0 close(3) = 0 write(2, "Destroying mycontainer failed\n", 35) = 35 exit_group(1) = ? +++ exited with 1 +++ ----------------------- % snip % ----------------------- last child pid 23103: ----------------------- % snip % ----------------------- set_robust_list(0x7f8da4af2ba0, 24) = 0 execve("/usr/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 7 vars */]) = -1 ENOENT (No such file or directory) execve("/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 7 vars */]) = -1 ENOENT (No such file or directory) exit_group(1) = ? +++ exited with 1 +++ ----------------------- % snip % ----------------------- So the lvremove command is not found. When I compare it with a manual run, the last child pid, which removes the LV, goes through more paths to find the lvremove command and then continues: ----------------------- % snip % ----------------------- set_robust_list(0x7fde2db25ba0, 24) = 0 execve("/usr/local/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory) execve("/usr/local/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory) execve("/usr/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory) execve("/usr/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory) execve("/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = 0 brk(0) = 0x1a48000 [...] ----------------------- % snip % ----------------------- Looking at thismakes me think of checking the $PATH... And indeed: # echo $PATH as root on cli: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # cronjob: 58 08 * * * echo $PATH > /var/log/path.log # cat /var/log/path.log /usr/bin:/bin OK, makes sense now. On Fri, Sep 25, 2015 at 8:14 AM, Claudio Kuenzler <c...@claudiokuenzler.com> wrote: > Hello, > > Been pulling my hair out (what's left of it) because a script basically > used for auto-re-creation of containers is working when I launch it > manually, but the very same script does not work when run by cron. > > I narrowed it down to the "lxc-destroy" command which simply does not do > anything when run by cron. You can reproduce it with a simple cronjob like > this: > > 03 08 * * * lxc-stop -n mycontainer && lxc-destroy -n mycontainer > > What happens then? The container is correctly stopped - but remains > stopped. The container is still showing up in lxc-ls (in state STOPPED). > > I suspect there is a problem deleting the logical volume (lxc.rootfs) of > the container when lxc-destroy is launched, because a quick "lvs" after the > cronjob ran through still shows the LV of the container. > > Ubuntu 14.04.1 LTS, 3.16.0-48-generic, lxc 1.0.7-0ubuntu0.2 > > Any ideas? > > cheers, > ck >
_______________________________________________ lxc-users mailing list lxc-users@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-users