Действительно ли возможно запланировать задание крона для выполнения каждые две недели?

Моя самая большая проблема находится в понимании всей непрозрачной терминологии, которую они изобрели для него. Я вижу, как повторно отобразить единственный ключ в его различных измененных формах, но существует не, "ИГНОРИРУЮТ ЭТОТ КЛЮЧ

В Вашем случае "игнорируют этот ключ", переводит ни на что для "переотображения".
Откройте терминал и работайте:

xmodmap -e 'keycode 112='

Ваша клавиша Page Up перенесет внезапную смерть.

Повторно включите его с:

xmodmap -e 'keycode 112= Prior'

Для постоянного отключения его, добавьте:

keycode 112=

к Вашему ~/.Xmodmap

Протестируйте свой файл конфигурации:

xmodmap ~/.Xmodmap
7
20.04.2015, 20:39
3 ответа

Нет, Крон знает только день недели, день месяца и месяц.

Выполнять команду дважды в месяц в фиксированные дни (например, 1-е и 16-е) легко:

42 4 1,16 * *  do_stuff

Выполнять команду раз в две недели - другое дело. Лучшее, что вы можете сделать - это запускать команду каждую неделю и заставлять ее ничего не делать каждую вторую неделю. В Linux вы можете разделить количество секунд с эпохи (date +%s) на количество секунд в неделю, чтобы получить число, которое переворачивает четность каждую неделю. Обратите внимание, что в кронтабе % нужно экранировать (крон превращает % в новые строки перед выполнением команды).

42 4 * * 1  case $(($(date +\%s) / (60*60*24*7))) in *[02468]) do_stuff;; esac
12
27.01.2020, 20:16

Вы не можете напрямую иметь CRON . Запустите задание в две недели (каждые две недели). Тем не менее, это достаточно просто, чтобы гарантировать, что основная часть работы проходит только каждую в другую неделю. @Gilles предложил одно решение; Вот еще один:

42 4 * * 1    test 1 -eq $(($(date +\%g) & 1)) && do_stuff...

Дата +% G команда возвращает текущую неделю номер (года), и это побитовое и для возврата либо 1 или 0, прежде чем использовать, чтобы определить, может ли реальную работу быть запущенным.

Такое же оговорку на процентном символе % % : в Crontab Crontab вход необходимо избежать, чтобы предотвратить CRON .

2
27.01.2020, 20:16

Я знаю, что опаздываю на вечеринку, но всем нужно одно или три решения любой проблемы...

Я нашел этот пост, когда хотел сделать то же самое, что и ОП, за исключением воскресенья.

@user140906 имеет действительную проблему, которую можно наблюдать при запуске этого фрагмента;

for n in $(seq 17 33); do ncal -A1 -bw dec 20${n}; done

Кажется, что сначала это повторяется каждые 6 лет. -Я не проверял их все!:-)

Затем я нашел эту ссылку , которая предлагает два решения, одно из которых похоже на @gilles -, поэтому -перестать -быть -злом, это должно работать, наиболее очевидным является ниже;

#!/bin/bash

# a file marking the state on disk
mark_file=$HOME/.job-run-marker-1

# check whether the job run last time it is invoked
if [ -e $mark_file ] ; then
  rm -f $mark_file
else
  touch $mark_file
  exit 0
fi

# job command is here

В сочетании с записью crontab, например;

0 2 * * 2 my_script

Легко адаптируется для использования с несколькими crontabзаписями (передает значение для mark_fileили IDвместо жесткого -кодирования )или расширяет ту же логику с некоторыми grep/ awk/ sedдля добавления/удаления/добавления строк в файле, представляющих идентификатор и статус/дату выполнения каждого задания.

В любом случае, надеюсь, это поможет кому-то, возможно, даже будущему мне!

2
28.08.2021, 18:49

Теги

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