Системный таймер запускает запланированную службу 2 раза подряд, а не только 1 раз

Попробуйте направить вывод findна duи укажите флаг --files0-from -:

find -type f -mtime +60 -print0 | du -shc --files0-from -

Это должно дать вам общую сумму в конце

Чтобы получить только общее количество, направьте этот вывод наtail -n1:

find -type f -mtime +60 -print0 | du -shc --files0-from - | tail -n1

Я должен упомянуть, что на самом деле я только что протестировал это с gnu linux, а не с busybox. Глядя на страницу busybox , не похоже, что duподдерживает опцию --files0-from.

Вы можете изменить приведенную выше команду на это, чтобы она работала на busybox:

find -type f -mtime +60 -print0 | xargs -0 du -ch | tail -n1

Описанное выше также работает с файлами, в именах которых есть пробелы и символы новой строки, но может работать неправильно, если с помощью команды findнайдено слишком много файлов. См. ниже комментарий . Если вы чувствуете, что файлов может быть слишком много, вы можете попробовать другой ответ на этой странице.

1
15.12.2020, 09:38
1 ответ

Давайте сосредоточимся здесь на одном вопросе :дубликат запускается каждый час. Вы использовали этот синтаксис для этого:

OnCalendar=*-*-* *:40:*

Согласно man systemd.time, подстановочный знак в секундах означает, что он соответствует каждой секунде 40-й минуты каждого часа. Вы можете подтвердить это с помощью включенного инструмента systemd-analyze, который имеет вспомогательную команду календаря -:

.
systemd-analyze calendar --iterations=5 "*-*-* *:40:*"
Normalized form: *-*-* *:40:*
    Next elapse: Thu 2020-12-17 17:40:00 EST
       (in UTC): Thu 2020-12-17 22:40:00 UTC
       From now: 15min left
       Iter. #2: Thu 2020-12-17 17:40:01 EST
       (in UTC): Thu 2020-12-17 22:40:01 UTC
       From now: 15min left
       Iter. #3: Thu 2020-12-17 17:40:02 EST
       (in UTC): Thu 2020-12-17 22:40:02 UTC
       From now: 15min left
       Iter. #4: Thu 2020-12-17 17:40:03 EST
       (in UTC): Thu 2020-12-17 22:40:03 UTC
       From now: 15min left
       Iter. #5: Thu 2020-12-17 17:40:04 EST
       (in UTC): Thu 2020-12-17 22:40:04 UTC
       From now: 15min left

Так что это проблема.

Вторая проблема заключается в том, что вы включили Requires=в свой таймер. В man systed.unitв документации к директиве Requires=сказано следующее:

If this unit gets activated, the units listed [In Requires=] will be activated as well.

Это также может привести к повторной загрузке целевой службы.

Откройте новый вопрос о OnBootSec=сроках --, это отдельная проблема.

0
18.03.2021, 22:43

Теги

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