Как отменить рабочие места AnaCron, задерживаемые в течение определенного периода времени?

Документация по sysrq находится в исходном коде linux (https://github.com/torvalds/linux/blob/master/Documentation/sysrq.txt). Я очень рекомендую вам прочитать ее.

Включен ли ключ SysRq?

Во-первых, убедитесь, что использование волшебного ключа SysRq включено:

$ cat /proc/sys/kernel/sysrq
1

Если там написано 0, значит SysRq отключен. Вы можете включить его с помощью:

$ echo 1 > /proc/sys/kernel/sysrq

И он начнет действовать немедленно. Включение магического ключа связано с безопасностью, и на сайте TLDP есть хорошая документация.

Основано на некоторых раскладках клавиатуры, найденных в Википедии. Вы можете попробовать комбинацию PrtScr / Print Screen.

В моей системе: Alt + PrtScr + "OTHER". Это та же последовательность, что описана в этой статье Википедии.

Получение кода SysRq:

Вы можете запустить showkey для сканирования кодов / получения сканкодов:

$ showkey -s
0x38                 - i'm pressing Alt
0xb8                 - releasing Alt
0xe0 0x2a 0xe0 0x37  - print screen
0xe0 0xaa 0xe0 0xb7  - release print screen
0x38                 - i'm pressing Alt
0x54                 - i'm also pressing print screen
0x23                 - letter H
0xa3                 - bye bye letter H
0xd4                 - releasing print screen
0xb8                 - releasing Alt

0x54 = 84 будет Alt+PrtScr, который становится SysRq.

Давайте подтвердим это:

$ getkeycodes 
Plain scancodes xx (hex) versus keycodes (dec)
for 1-83 (0x01-0x53) scancode equals keycode

 0x50:   80  81  82  83  99   0  86  87
 0x58:   88 117   0   0  95 183 184 185
 0x60:    0   0   0   0   0   0   0   0
 0x68:    0   0   0   0   0   0   0   0
...

Моя система сопоставляет этот сканкод 0x54 с кодом 99, который является KEY_SYSRQ. Двойная проверка:

# rpm -ql kernel-headers | grep input.h | xargs grep KEY_SYSRQ
/usr/include/linux/input.h:#define KEY_SYSRQ        99

SysRq полезные комбинации:

  • Alt + PrtScr + D - это плохая комбинация для моей системы и выдает мне справку

    SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E)
    memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK
    show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N)
    powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T)
    Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
    
  • Alt + PrtScr + H - фактическое нажатие клавиши help

    SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E)
    memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK
    show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N)
    powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T)
    Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
    
  • Alt + PrtScr + B - перезагрузка
  • Alt + PrtScr + C - крах системы (с crashdump)
  • Alt + PrtScr + E -... SIGTERM всех задач, кроме init
  • Alt + PrtScr + F - вызов OOM killer
  • Alt + PrtScr + M - вывод статистики памяти / подкачки
  • Alt + PrtScr + O - выключить питание
  • Alt + PrtScr + S - sync все смонтированные файловые системы
  • Alt + PrtScr + U - перемонтировать все файловые системы как read- только
  • Alt + PrtScr + T - выводит список задач с трассировкой

1
08.01.2019, 14:05
2 ответа

Если у вас есть задание anacron, выполняющее ежедневное резервное копирование, и ваша система не работает в течение трех дней, anacronзапустит задание один раз , когда система подключится к сети на четвертый день.

Чтобы уточнить, anacronпозволяет указать команды, которые будут периодически повторяться с частотой, указанной в днях. При вызове anacron(, что может произойти во время загрузки, а также в заранее определенные часы дня ), он считывает список заданий из конфигурационного файла /etc/anacrontab. Для каждого задания anacronпроверяет, выполнялось ли задание за последние n дней. Для ежедневной работы это будет последний 1 день, т.е. сегодня. Если задание не запускалось в течение этого периода, anacron выполняет задание.

После завершения задания anacronзаписывает дату выполнения в файл под /var/spool/anacron. Этот файл используется для проверки состояния задания при вызове anacron на следующий день.

Поскольку anacronучитывает только количество дней, прошедших с момента последнего выполнения, и сконфигурированную частоту выполнения, нет проблемы многократного выполнения задания.

Ежедневное задание anacron можно настроить в файле конфигурации /etc/anacrontabс использованием следующего синтаксиса:

1 15 backup-job /path/to/backup/script.sh

1 — частота выполнения команды, указанная в днях, 15 — задержка в минутах, добавляемая к выполнению задания, «backup -job» — идентификатор, а «/path/to/backup/script.sh' — это команда, которую нужно выполнить. Подробнее см.man 8 anacronи man 5 anacrontab.

2
27.01.2020, 23:31

Таким образом, лучшее, что вы можете сделать, это создать файл блокировки при запуске резервного копирования и удалить его в конце скрипта. Конечно, перед созданием вы должны проверить, существует ли файл блокировки, и просто остановить скрипт, если да. Будьте осторожны, проверяйте, когда сценарий уничтожается извне, а файл блокировки все еще существует.

0
27.01.2020, 23:31

Теги

Похожие вопросы