Выполняйте Обновления системы защиты Ubuntu каждую субботу только

Для обработки статистических данных R обычно легче использовать.

Легче считать все данные в память. Awk не является самым большим языком для того (хотя это, конечно, возможно). Вот является недоброкачественная продукция сценарием Python.

#!/usr/bin/env python
import sys
n = int(sys.argv[1])     # the smooth parameter n must be passed as the first argument to the script
print sys.stdin.readline()  # print the header line
def split_line(line):  # split line into first 3 fields as string, then list of numbers
    fields = line[:-1].split(";")
    return [";".join(fields[:3])] + map(float, fields[3:7])
rows = map(split_line, sys.stdin.readlines())
def avg(i, j):
    return (rows[i-n][j] + rows[i][j] + rows[i+n][j]) / 3
for i in xrange(n, len(rows) - n):
    print ";".join([rows[i][0]] + [str(avg(i, j-2)) for j in xrange(3, 7)])

Если Ваши данные действительно огромны, вот сценарий, что я думаю, делает то, что Вы спрашиваете. Это читает 2*n+1 строки, хранит значения в prev[2*n] через prev[1] плюс $0, затем печатает среднее число для (n+1) th строка.

awk -F ';' -v OFS=';' -v n="${1-1}" '
    function avg(i) { return (prev[2*n, i] + prev[n, i] + $i) / 3; }
    NR == 1 { print; next }         # title line: print and skip the rest
    NR >= 2*n+2 {
        # fourth line on: print the average values from the past 3 lines
        # with the labels from the previous line
        print labels[n], avg(4), avg(5), avg(6), avg(7);
    }
    {
        # shift the saved averages by 1 position
        for (i=4; i<=7; i++) {
            for (k=2*n; k>1; k--) prev[k, i] = prev[k-1, i];
            prev[1, i] = $i;
        }
        # save the labels of this line to print in the next round
        for (k=n; k>1; k--) labels[k] = labels[k-1];
        labels[1] = $1 ";" $2 ";" $3;
    }
'

7
18.09.2016, 15:25
2 ответа

Если это абсолютно важно, чтобы работать только по субботам, то сделайте это:

  1. Удалить пакет AnaCron . Обратите внимание, что это также удаляет Ubuntu-Desktop , но вам, вероятно, не понадобится на сервере. Это необходимо, потому что в противном случае невозможно контролировать, в какой день недели Anacron будет работать в /etc/cron.weekly .
  2. Отредактируйте файл / etc / crontab , он должен иметь следующую строку:

     47 6 * * 7 Root Test -x / usr / sbin / anacron ||  (CD / && Run-Parts --report /etc/cron.weekly)
     

    Измените 7 в 6 (суббота) и отрегулируйте первые два числа (минуты и час) в ваши потребности. Это вызвало все работы в /etc/cron.Weekly , чтобы запустить в указанный день недели и часа.

  3. Переместите файл /etc/cron.daily/apt на /etc/cron.weekly/apt .
2
27.01.2020, 20:19

APT

файл в /etc/cron.daily включает в себя инструкции для этого:

# Create /etc/apt/apt.conf.d/02periodic file to set your preference.
....
#
#  APT::Periodic::Unattended-Upgrade "0";
#  - Run the "unattended-upgrade" security upgrade script
#    every n-days (0=disabled)
#    Requires the package "unattended-upgrades" and will write
#    a log in /var/log/unattended-upgrades

Настройка

APT::Periodic::Unattended-Upgrade "7";

делает это проходить каждые семь дней, а также Если вы измените это в пятницу, первый Cron Daily Run будет в субботу утром (6:25 утра в соответствии с по умолчанию / etc / crontab ).

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

Одна вещь, которую вы можете сделать при выходе из синхронизации, использует запись CRONTAB для запуска сенсорной команды, которая касается файла штампа / var / lib / apt / prientication / update-tamp . Устанавливает его, чтобы сделать прошлой субботы ')

2
27.01.2020, 20:19

Теги

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