int main(int argc, char *argv[]) { struct lxc_container *c; bool s; int ret = 1; if (lxc_arguments_parse(&my_args, argc, argv)) return 1; if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, my_args.progname, my_args.quiet, my_args.lxcpath[0])) return 1; /* shortcut - if locking is bogus, we should be able to kill * containers at least */ if (my_args.nolock) return lxc_cmd_stop(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]); if (!c) { fprintf(stderr, "Error opening container\n"); goto out; } if (!c->may_control(c)) { fprintf(stderr, "Insufficent privileges to control %s\n", c->name); goto out; } if (!c->is_running(c)) { fprintf(stderr, "%s is not running\n", c->name); ret = 2; goto out; } if (my_args.hardstop) { ret = c->stop(c) ? 0 : 1; goto out; } if (my_args.reboot) { ret = do_reboot_and_check(&my_args, c); goto out; } if (my_args.shutdown) my_args.timeout = 0; s = c->shutdown(c, my_args.timeout); if (!s) { if (!my_args.shutdown) ret = c->wait(c, "STOPPED", -1) ? 0 : 1; else ret = 1; // fail } else ret = 0; out: lxc_container_put(c); return ret; }
int main(int argc, char *argv[]) { struct lxc_container *c; bool s; int ret = EXIT_FAILURE; if (lxc_arguments_parse(&my_args, argc, argv)) exit(ret); if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, my_args.progname, my_args.quiet, my_args.lxcpath[0])) exit(ret); lxc_log_options_no_override(); /* Set default timeout */ if (my_args.timeout == -2) { if (my_args.hardstop) my_args.timeout = 0; else my_args.timeout = 60; } if (my_args.nowait) my_args.timeout = 0; /* some checks */ if (!my_args.hardstop && my_args.timeout < -1) { fprintf(stderr, "invalid timeout\n"); exit(ret); } if (my_args.hardstop && my_args.nokill) { fprintf(stderr, "-k can't be used with --nokill\n"); exit(ret); } if (my_args.hardstop && my_args.reboot) { fprintf(stderr, "-k can't be used with -r\n"); exit(ret); } if (my_args.hardstop && my_args.timeout) { fprintf(stderr, "-k doesn't allow timeouts\n"); exit(ret); } if (my_args.nolock && !my_args.hardstop) { fprintf(stderr, "--nolock may only be used with -k\n"); exit(ret); } /* shortcut - if locking is bogus, we should be able to kill * containers at least */ if (my_args.nolock) { ret = lxc_cmd_stop(my_args.name, my_args.lxcpath[0]); exit(ret); } c = lxc_container_new(my_args.name, my_args.lxcpath[0]); if (!c) { fprintf(stderr, "Error opening container\n"); goto out; } if (my_args.rcfile) { c->clear_config(c); if (!c->load_config(c, my_args.rcfile)) { fprintf(stderr, "Failed to load rcfile\n"); goto out; } c->configfile = strdup(my_args.rcfile); if (!c->configfile) { fprintf(stderr, "Out of memory setting new config filename\n"); goto out; } } if (!c->may_control(c)) { fprintf(stderr, "Insufficent privileges to control %s\n", c->name); goto out; } if (!c->is_running(c)) { fprintf(stderr, "%s is not running\n", c->name); /* Per our manpage we need to exit with exit code: * 2: The specified container exists but was not running. */ ret = 2; goto out; } /* kill */ if (my_args.hardstop) { ret = c->stop(c) ? EXIT_SUCCESS : EXIT_FAILURE; goto out; } /* reboot */ if (my_args.reboot) { ret = do_reboot_and_check(&my_args, c) < 0 ? EXIT_SUCCESS : EXIT_FAILURE; goto out; } /* shutdown */ s = c->shutdown(c, my_args.timeout); if (!s) { if (my_args.timeout == 0) ret = EXIT_SUCCESS; else if (my_args.nokill) ret = EXIT_FAILURE; else ret = c->stop(c) ? EXIT_SUCCESS : EXIT_FAILURE; } else { ret = EXIT_SUCCESS; } out: lxc_container_put(c); exit(ret); }
int main(int argc, char *argv[]) { struct lxc_container *c; bool s; int ret = 1; if (lxc_arguments_parse(&my_args, argc, argv)) return 1; if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, my_args.progname, my_args.quiet, my_args.lxcpath[0])) return 1; lxc_log_options_no_override(); /* Set default timeout */ if (my_args.timeout == -2) { if (my_args.hardstop) { my_args.timeout = 0; } else { my_args.timeout = 60; } } if (my_args.nowait) { my_args.timeout = 0; } /* some checks */ if (!my_args.hardstop && my_args.timeout < -1) { fprintf(stderr, "invalid timeout\n"); return 1; } if (my_args.hardstop && my_args.nokill) { fprintf(stderr, "-k can't be used with --nokill\n"); return 1; } if (my_args.hardstop && my_args.reboot) { fprintf(stderr, "-k can't be used with -r\n"); return 1; } if (my_args.hardstop && my_args.timeout) { fprintf(stderr, "-k doesn't allow timeouts\n"); return 1; } if (my_args.nolock && !my_args.hardstop) { fprintf(stderr, "--nolock may only be used with -k\n"); return 1; } /* shortcut - if locking is bogus, we should be able to kill * containers at least */ if (my_args.nolock) return lxc_cmd_stop(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]); if (!c) { fprintf(stderr, "Error opening container\n"); goto out; } if (!c->may_control(c)) { fprintf(stderr, "Insufficent privileges to control %s\n", c->name); goto out; } if (!c->is_running(c)) { fprintf(stderr, "%s is not running\n", c->name); ret = 2; goto out; } /* kill */ if (my_args.hardstop) { ret = c->stop(c) ? 0 : 1; goto out; } /* reboot */ if (my_args.reboot) { ret = do_reboot_and_check(&my_args, c); goto out; } /* shutdown */ s = c->shutdown(c, my_args.timeout); if (!s) { if (my_args.timeout == 0) ret = 0; else if (my_args.nokill) ret = 1; else ret = c->stop(c) ? 0 : 1; } else ret = 0; out: lxc_container_put(c); return ret; }