Merge pull request #1366 from giuseppe/conmon-additional-command-atexit
conmon: add new option to call cleanup program at exit
This commit is contained in:
commit
1d89b897f7
1 changed files with 32 additions and 0 deletions
|
@ -116,6 +116,8 @@ static int opt_timeout = 0;
|
||||||
static int64_t opt_log_size_max = -1;
|
static int64_t opt_log_size_max = -1;
|
||||||
static char *opt_socket_path = DEFAULT_SOCKET_PATH;
|
static char *opt_socket_path = DEFAULT_SOCKET_PATH;
|
||||||
static bool opt_no_new_keyring = false;
|
static bool opt_no_new_keyring = false;
|
||||||
|
static char *opt_exit_command = NULL;
|
||||||
|
static gchar **opt_exit_args = NULL;
|
||||||
static GOptionEntry opt_entries[] =
|
static GOptionEntry opt_entries[] =
|
||||||
{
|
{
|
||||||
{ "terminal", 't', 0, G_OPTION_ARG_NONE, &opt_terminal, "Terminal", NULL },
|
{ "terminal", 't', 0, G_OPTION_ARG_NONE, &opt_terminal, "Terminal", NULL },
|
||||||
|
@ -132,6 +134,8 @@ static GOptionEntry opt_entries[] =
|
||||||
{ "exec", 'e', 0, G_OPTION_ARG_NONE, &opt_exec, "Exec a command in a running container", NULL },
|
{ "exec", 'e', 0, G_OPTION_ARG_NONE, &opt_exec, "Exec a command in a running container", NULL },
|
||||||
{ "exec-process-spec", 0, 0, G_OPTION_ARG_STRING, &opt_exec_process_spec, "Path to the process spec for exec", NULL },
|
{ "exec-process-spec", 0, 0, G_OPTION_ARG_STRING, &opt_exec_process_spec, "Path to the process spec for exec", NULL },
|
||||||
{ "exit-dir", 0, 0, G_OPTION_ARG_STRING, &opt_exit_dir, "Path to the directory where exit files are written", NULL },
|
{ "exit-dir", 0, 0, G_OPTION_ARG_STRING, &opt_exit_dir, "Path to the directory where exit files are written", NULL },
|
||||||
|
{ "exit-command", 0, 0, G_OPTION_ARG_STRING, &opt_exit_command, "Path to the program to execute when the container terminates its execution", NULL },
|
||||||
|
{ "exit-command-arg", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_exit_args, "Additional arg to pass to the exit command. Can be specified multiple times", NULL },
|
||||||
{ "log-path", 'l', 0, G_OPTION_ARG_STRING, &opt_log_path, "Log file path", NULL },
|
{ "log-path", 'l', 0, G_OPTION_ARG_STRING, &opt_log_path, "Log file path", NULL },
|
||||||
{ "timeout", 'T', 0, G_OPTION_ARG_INT, &opt_timeout, "Timeout in seconds", NULL },
|
{ "timeout", 'T', 0, G_OPTION_ARG_INT, &opt_timeout, "Timeout in seconds", NULL },
|
||||||
{ "log-size-max", 0, 0, G_OPTION_ARG_INT64, &opt_log_size_max, "Maximum size of log file", NULL },
|
{ "log-size-max", 0, 0, G_OPTION_ARG_INT64, &opt_log_size_max, "Maximum size of log file", NULL },
|
||||||
|
@ -1089,6 +1093,31 @@ static void setup_oom_handling(int container_pid)
|
||||||
g_unix_fd_add (oom_event_fd, G_IO_IN, oom_cb, NULL);
|
g_unix_fd_add (oom_event_fd, G_IO_IN, oom_cb, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void do_exit_command()
|
||||||
|
{
|
||||||
|
gchar **args;
|
||||||
|
size_t n_args = 0;
|
||||||
|
|
||||||
|
/* Count the additional args, if any. */
|
||||||
|
if (opt_exit_args)
|
||||||
|
for (; opt_exit_args[n_args]; n_args++);
|
||||||
|
|
||||||
|
args = malloc(sizeof (gchar *) * (n_args + 2));
|
||||||
|
if (args == NULL)
|
||||||
|
_exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
args[0] = opt_exit_command;
|
||||||
|
if (opt_exit_args)
|
||||||
|
for (n_args = 0; opt_exit_args[n_args]; n_args++)
|
||||||
|
args[n_args + 1] = opt_exit_args[n_args];
|
||||||
|
args[n_args + 1] = NULL;
|
||||||
|
|
||||||
|
execve(opt_exit_command, args, NULL);
|
||||||
|
|
||||||
|
/* Should not happen, but better be safe. */
|
||||||
|
_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1341,6 +1370,9 @@ int main(int argc, char *argv[])
|
||||||
exit(127);
|
exit(127);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt_exit_command)
|
||||||
|
atexit(do_exit_command);
|
||||||
|
|
||||||
g_ptr_array_free (runtime_argv, TRUE);
|
g_ptr_array_free (runtime_argv, TRUE);
|
||||||
|
|
||||||
/* The runtime has that fd now. We don't need to touch it anymore. */
|
/* The runtime has that fd now. We don't need to touch it anymore. */
|
||||||
|
|
Loading…
Reference in a new issue