77
77
static bool arg_swap_auto = true;
78
78
static char **arg_default_controllers = NULL;
79
79
static char ***arg_join_controllers = NULL;
80
static ExecOutput arg_default_std_output = EXEC_OUTPUT_SYSLOG;
80
static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
81
81
static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
83
83
static FILE* serialization = NULL;
203
if ((tty_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC)) < 0) {
203
tty_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
204
205
log_error("Failed to open /dev/console: %s", strerror(-tty_fd));
208
if ((r = reset_terminal_fd(tty_fd)) < 0)
209
/* We don't want to force text mode.
210
* plymouth may be showing pictures already from initrd. */
211
r = reset_terminal_fd(tty_fd, false);
209
213
log_error("Failed to reset /dev/console: %s", strerror(-r));
211
215
close_nointr_nofail(tty_fd);
304
308
if ((r = parse_boolean(word + 20)) < 0)
305
log_warning("Failed to parse show status switch %s, Ignoring.", word + 20);
309
log_warning("Failed to parse show status switch %s. Ignoring.", word + 20);
307
311
arg_show_status = r;
308
312
} else if (startswith(word, "systemd.default_standard_output=")) {
311
315
if ((r = exec_output_from_string(word + 32)) < 0)
312
log_warning("Failed to parse default standard output switch %s, Ignoring.", word + 32);
316
log_warning("Failed to parse default standard output switch %s. Ignoring.", word + 32);
314
318
arg_default_std_output = r;
315
319
} else if (startswith(word, "systemd.default_standard_error=")) {
318
322
if ((r = exec_output_from_string(word + 31)) < 0)
319
log_warning("Failed to parse default standard error switch %s, Ignoring.", word + 31);
323
log_warning("Failed to parse default standard error switch %s. Ignoring.", word + 31);
321
325
arg_default_std_error = r;
326
} else if (startswith(word, "systemd.setenv=")) {
330
cenv = strdup(word + 15);
334
eq = strchr(cenv, '=');
338
log_warning("unsetenv failed %s. Ignoring.", strerror(errno));
341
r = setenv(cenv, eq + 1, 1);
343
log_warning("setenv failed %s. Ignoring.", strerror(errno));
322
346
#ifdef HAVE_SYSV_COMPAT
323
347
} else if (startswith(word, "systemd.sysv_console=")) {
326
350
if ((r = parse_boolean(word + 21)) < 0)
327
log_warning("Failed to parse SysV console switch %s, Ignoring.", word + 20);
351
log_warning("Failed to parse SysV console switch %s. Ignoring.", word + 20);
329
353
arg_sysv_console = r;
343
367
#ifdef HAVE_SYSV_COMPAT
344
368
"systemd.sysv_console=0|1 Connect output of SysV scripts to console\n"
346
"systemd.log_target=console|kmsg|syslog|syslog-or-kmsg|null\n"
370
"systemd.log_target=console|kmsg|journal|journal-or-kmsg|syslog|syslog-or-kmsg|null\n"
348
372
"systemd.log_level=LEVEL Log level\n"
349
373
"systemd.log_color=0|1 Highlight important log messages\n"
350
374
"systemd.log_location=0|1 Include code location in log messages\n"
351
"systemd.default_standard_output=null|tty|syslog|syslog+console|kmsg|kmsg+console\n"
375
"systemd.default_standard_output=null|tty|syslog|syslog+console|kmsg|kmsg+console|journal|journal+console\n"
352
376
" Set default log output for services\n"
353
"systemd.default_standard_error=null|tty|syslog|syslog+console|kmsg|kmsg+console\n"
377
"systemd.default_standard_error=null|tty|syslog|syslog+console|kmsg|kmsg+console|journal|journal+console\n"
354
378
" Set default log error output for services\n");
356
380
} else if (streq(word, "quiet")) {
993
1017
#ifdef HAVE_SYSV_COMPAT
994
1018
" --sysv-console[=0|1] Connect output of SysV scripts to console\n"
996
" --log-target=TARGET Set log target (console, syslog, kmsg, syslog-or-kmsg, null)\n"
1020
" --log-target=TARGET Set log target (console, journal, syslog, kmsg, journal-or-kmsg, syslog-or-kmsg, null)\n"
997
1021
" --log-level=LEVEL Set log level (debug, info, notice, warning, err, crit, alert, emerg)\n"
998
1022
" --log-color[=0|1] Highlight important log messages\n"
999
1023
" --log-location[=0|1] Include code location in log messages\n"
1408
1437
if ((r = manager_load_unit(m, arg_default_unit, NULL, &error, &target)) < 0) {
1409
1438
log_error("Failed to load default target: %s", bus_error(&error, r));
1410
1439
dbus_error_free(&error);
1411
} else if (target->meta.load_state == UNIT_ERROR)
1412
log_error("Failed to load default target: %s", strerror(-target->meta.load_error));
1413
else if (target->meta.load_state == UNIT_MASKED)
1440
} else if (target->load_state == UNIT_ERROR)
1441
log_error("Failed to load default target: %s", strerror(-target->load_error));
1442
else if (target->load_state == UNIT_MASKED)
1414
1443
log_error("Default target masked.");
1416
if (!target || target->meta.load_state != UNIT_LOADED) {
1445
if (!target || target->load_state != UNIT_LOADED) {
1417
1446
log_info("Trying to load rescue target...");
1419
1448
if ((r = manager_load_unit(m, SPECIAL_RESCUE_TARGET, NULL, &error, &target)) < 0) {
1420
1449
log_error("Failed to load rescue target: %s", bus_error(&error, r));
1421
1450
dbus_error_free(&error);
1423
} else if (target->meta.load_state == UNIT_ERROR) {
1424
log_error("Failed to load rescue target: %s", strerror(-target->meta.load_error));
1452
} else if (target->load_state == UNIT_ERROR) {
1453
log_error("Failed to load rescue target: %s", strerror(-target->load_error));
1426
} else if (target->meta.load_state == UNIT_MASKED) {
1455
} else if (target->load_state == UNIT_MASKED) {
1427
1456
log_error("Rescue target masked.");
1432
assert(target->meta.load_state == UNIT_LOADED);
1461
assert(target->load_state == UNIT_LOADED);
1434
1463
if (arg_action == ACTION_TEST) {
1435
1464
printf("-> By units:\n");
1436
1465
manager_dump_units(m, stdout, "\t");
1439
if ((r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, NULL)) < 0) {
1468
r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job);
1440
1470
log_error("Failed to start default target: %s", bus_error(&error, r));
1441
1471
dbus_error_free(&error);
1474
m->default_unit_job_id = default_unit_job->id;
1445
1476
after_startup = now(CLOCK_MONOTONIC);
1446
1477
log_full(arg_action == ACTION_TEST ? LOG_INFO : LOG_DEBUG,