<div dir="ltr"><div><div>Running the same command with strace actually shows the command fails.<br></div>The relevant part:<br><br></div>----------------------- % snip % ----------------------- <div>stat("/var/lib/lxc/mycontainer/config", {st_mode=S_IFREG|0644, st_size=808, ...}) = 0<br>pipe([3, 4])                            = 0<br>clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23100<br>close(4)                                = 0<br>read(3, "\377\377\377\377", 4)          = 4<br>close(3)                                = 0<br>wait4(23100, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23100<br>--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23100, si_status=1, si_utime=0, si_stime=0} ---<br>socket(PF_LOCAL, SOCK_STREAM, 0)        = 3<br>connect(3, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 40) = -1 ECONNREFUSED (Connection refused)<br>connect(3, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 110) = -1 ECONNREFUSED (Connection refused)<br>close(3)                                = 0<br>stat("/var/lib/lxc/mycontainer/config", {st_mode=S_IFREG|0644, st_size=808, ...}) = 0<br>open("/run/lxc/lock//var/lib/lxc/mycontainer", O_RDWR|O_CREAT, 0600) = 3<br>fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0<br>pipe([4, 5])                            = 0<br>clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23101<br>close(5)                                = 0<br>read(4, "\377\377\377\377", 4)          = 4<br>close(4)                                = 0<br>wait4(23101, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23101<br>--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23101, si_status=1, si_utime=0, si_stime=0} ---<br>socket(PF_LOCAL, SOCK_STREAM, 0)        = 4<br>connect(4, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 40) = -1 ECONNREFUSED (Connection refused)<br>connect(4, {sa_family=AF_LOCAL, sun_path=@"/var/lib/lxc/mycontainer/command"}, 110) = -1 ECONNREFUSED (Connection refused)<br>close(4)                                = 0<br>open("/var/lib/lxc/mycontainer/lxc_snapshots", O_RDONLY) = -1 ENOENT (No such file or directory)<br>geteuid()                               = 0<br>pipe2([4, 5], O_CLOEXEC)                = 0<br>clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23102<br>close(5)                                = 0<br>fcntl(4, F_GETFL)                       = 0 (flags O_RDONLY)<br>fstat(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0<br>mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8da4aff000<br>lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)<br>read(4, "", 4096)                       = 0<br>--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23102, si_status=127, si_utime=0, si_stime=0} ---<br>close(4)                                = 0<br>munmap(0x7f8da4aff000, 4096)            = 0<br>wait4(23102, [{WIFEXITED(s) && WEXITSTATUS(s) == 127}], 0, NULL) = 23102<br>stat("/dev/vglxc/mycontainer", {st_mode=S_IFBLK|0660, st_rdev=makedev(252, 0), ...}) = 0<br>open("/sys/dev/block/252:0/dm/uuid", O_RDONLY) = 4<br>fstat(4, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0<br>mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8da4aff000<br>read(4, "LVM-AGQfFleAZmtwXaRlf3qusphA68nyKV56qCiz847f5Jd9gR5Em5pzaJdSfo24s4br\n", 4096) = 69<br>close(4)                                = 0<br>munmap(0x7f8da4aff000, 4096)            = 0<br>clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f8da4af2b90) = 23103<br>wait4(23103, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 23103<br>--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23103, si_status=1, si_utime=0, si_stime=0} ---<br>write(2, "lxc_container: ", 15)         = 15<br>write(2, "lxccontainer.c: lxcapi_destroy: 2073 ", 37) = 37<br>write(2, "Error destroying rootfs for mycontainer", 44) = 44<br>write(2, "\n", 1)                       = 1<br>fcntl(3, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0<br>close(3)                                = 0<br>write(2, "Destroying mycontainer failed\n", 35) = 35<br>exit_group(1)                           = ?<br>+++ exited with 1 +++<br>----------------------- % snip % ----------------------- <br><br><br>last child pid 23103:<br><br>----------------------- % snip % ----------------------- <br>set_robust_list(0x7f8da4af2ba0, 24)     = 0<br>execve("/usr/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 7 vars */]) = -1 ENOENT (No such file or directory)<br>execve("/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 7 vars */]) = -1 ENOENT (No such file or directory)<br>exit_group(1)                           = ?<br>+++ exited with 1 +++<br>----------------------- % snip % ----------------------- <br><br></div><div>So the lvremove command is not found. <br></div><div><br></div><div>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:<br><br>----------------------- % snip % ----------------------- <br>set_robust_list(0x7fde2db25ba0, 24)     = 0<br>execve("/usr/local/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)<br>execve("/usr/local/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)<br>execve("/usr/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)<br>execve("/usr/bin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)<br>execve("/sbin/lvremove", ["lvremove", "-f", "/dev/vglxc/mycontainer"], [/* 34 vars */]) = 0<br>brk(0)                                  = 0x1a48000<br>[...]<br>----------------------- % snip % ----------------------- <br><br></div><div>Looking at thismakes me think of checking the $PATH... And indeed:<br><br># echo $PATH as root on cli:<br>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin<br><br></div><div># cronjob:<br></div><div>58 08 * * * echo $PATH > /var/log/path.log<br><br># cat /var/log/path.log <br>/usr/bin:/bin<br><br><br></div><div>OK, makes sense now.<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 25, 2015 at 8:14 AM, Claudio Kuenzler <span dir="ltr"><<a href="mailto:ck@claudiokuenzler.com" target="_blank">ck@claudiokuenzler.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div>Hello,<br><br></div>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.<br><br></div>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:<br><br>03 08 * * * lxc-stop -n mycontainer && lxc-destroy -n mycontainer<br><br></div>What happens then? The container is correctly stopped - but remains stopped. The container is still showing up in lxc-ls (in state STOPPED). <br><br></div>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.<br><br></div>Ubuntu 14.04.1 LTS, 3.16.0-48-generic, lxc 1.0.7-0ubuntu0.2<br><br></div>Any ideas? <br><br></div>cheers,<br></div>ck<br></div>
</blockquote></div><br></div>