1 (2016-04-30 19:43:48 отредактировано sevo44)

Мне стало необходимо удалять резервные копии старше 30 ней.

все бэкапы лежат в папке /backup

Вначале проверим работает ли сам cron

Консоль
root@pve:~# ps faux | grep cron
root     29447  0.0  0.0  12728  2208 pts/0    S+   19:42   0:00          \_ grep cron
root      1065  0.0  0.0  27504  2924 ?        Ss   Apr29   0:00 /usr/sbin/cron -f

Если вывод есть то все нормально в противном случае необходимо установить.


Создал файл delbackup.sh

поместил туда

Консоль
#!/bin/sh
find /backup/ -type f -mtime +30 -delete

-type f  - говорит о том что будут удалены только файлы! каталоги не учитываются!

и положил в папку /root

и обезательно надо делать исполнительным так как иначе он не будет работать!!!

Консоль
chmod +x /root/delbackup.sh

Откроем файл и добавим строчку

Консоль
# mcedit /etc/crontab

30 2 * * * root /root/del-backup.sh >/dev/null 2>&1

Теперь каждый день в 2:30 все файлы в нужной папки старше 30 дней будут удалены.

Можешь написать вместо 30 2 * * *     просто @daily   если не критично время выполнения.
Будет в полночь выполняться.

Меня тут нет!
Спасибо сказали: XliN, algri14, TopE3

2

Mageia использует systemd. Вместо cron можно использовать systemd-таймер.

/etc/systemd/system/del_backup.service

[Unit]
Description=Delete backup

[Service]
WorkingDirectory=/где/оно/должно/работать
ExecStart=/root/bin/del-backup.sh
Type=simple

/etc/systemd/system/del_backup.timer

[Unit]
Description=Delete backup every day

[Timer]
OnCalendar=*-*-* 02:30:00
Unit=del_backup.service

[Install]
WantedBy=multi-user.target

Консоль
# systemctl start del_backup.timer
# systemctl enable del_backup.timer

Логи можно будет смотреть

Консоль
# journalctl -u del_backup.service

Fedora & GNOME
Спасибо сказали: algri14, TopE, XliN, sevo44, BoDun5

3

Возникло несколько вопросов
1. Вот лог до тех пор пока я не сделал файл запускаемым.

Консоль
Apr 30 19:09:01 pve CRON[27461]: (root) CMD (/root/delbackup.sh)
Apr 30 19:09:01 pve postfix/pickup[26841]: F189D280CD3: uid=0 from=<root>
Apr 30 19:09:01 pve postfix/cleanup[25841]: F189D280CD3: message-id=<20160430160901.F189D280CD3@pve.sevo44>
Apr 30 19:09:02 pve postfix/qmgr[1053]: F189D280CD3: from=<root@pve.sevo44>, size=617, nrcpt=1 (queue active)
Apr 30 19:09:02 pve pvemailforward[27465]: forward mail to <dolotov44@yandex.ru>
Apr 30 19:09:02 pve postfix/pickup[26841]: 75947280DA5: uid=65534 from=<dolotov44@yandex.ru>
Apr 30 19:09:02 pve postfix/cleanup[25841]: 75947280DA5: message-id=<20160430160901.F189D280CD3@pve.sevo44>
Apr 30 19:09:02 pve postfix/local[22960]: F189D280CD3: to=<root@pve.sevo44>, orig_to=<root>, relay=local, delay=0.67, delays=0.2/0/0/0.47, dsn=2.0.0,
Apr 30 19:09:02 pve postfix/qmgr[1053]: F189D280CD3: removed
Apr 30 19:09:02 pve postfix/qmgr[1053]: 75947280DA5: from=<dolotov44@yandex.ru>, size=779, nrcpt=1 (queue active)
Apr 30 19:09:03 pve postfix/smtp[24435]: 75947280DA5: to=<dolotov44@yandex.ru>, relay=mx.yandex.ru[213.180.193.89]:25, delay=0.95, delays=0.07/0/0.36
Apr 30 19:09:03 pve postfix/qmgr[1053]: 75947280DA5: removed
Apr 30 19:10:01 pve CRON[27540]: (root) CMD (/root/delbackup.sh)   --- вот тут я сделал его запускным и логи поменялись
Apr 30 19:11:01 pve CRON[27605]: (root) CMD (/root/delbackup.sh)
Apr 30 19:12:01 pve CRON[27670]: (root) CMD (/root/delbackup.sh)
Apr 30 19:13:01 pve CRON[27736]: (root) CMD (/root/delbackup.sh)
Apr 30 19:14:01 pve CRON[27794]: (root) CMD (/root/delbackup.sh)

Я правильно понимаю что пока файл не был запускаемым система пыталась отправить мне что то на почту? Но сообщения не приходили....
Как только сделал запускаемыми то теперь все выполняется и в логе чисто. Возможность писать в лог что было удалено как то можно?

2. В строчке
30 2 * * * root /root/del-backup.sh      что делает эта запись в конце --->    >/dev/null 2>&1

3. В чем примущество  systemd перед cron

Меня тут нет!

4

sevo44 пишет:

Я правильно понимаю что пока файл не был запускаемым система пыталась отправить мне что то на почту? Но сообщения не приходили....

Да, на почту слать может.

sevo44 пишет:

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

Сделать логгирование на уровне скрипта и не выбрасывать вывод в никуда.

sevo44 пишет:

что делает эта запись в конце --->    >/dev/null 2>&1

Перенаправляет вывод. Отправляет /dev/null и stdout, и stderr.

sevo44 пишет:

3. В чем примущество  systemd перед cron

systemd - набор блоков для построения ОС на базе ядра linux и системный менеджер. Это один из ключевых компонентов системы, вполне логично использовать его возможности раз уж он есть.

В сравнении systemd-таймеров с крон:
1. таймер запускает юнит, а в юните можно очень много всего сделать, от переменных окружения и пре/пост действий до ограничения на использование ресурсов.
2. удобное чтение выхлопа с journalctl, я уже выше давал команду, туда свалится весь stdout и stderr
3. удобно управлять выполнением и следить за статусом и таймера, и юнита через systemctl, крон же пуляет на старт скрипты и дальше не его забота, если скрипт хоть как-то запустился
4. таймеры живут отдельно друг от друга, управление их состоянием идет отдельно, крон нужно релоадить/рестартить весь

Fedora & GNOME

5

xxblx⇓ пишет:

Сделать логгирование на уровне скрипта и не выбрасывать вывод в никуда.

Это надо в файл delbackup.sh добавить? а что добавить?
ну и убрать  >/dev/null 2>&1 это как я понимаю и убивает всю информацию

Теперь понятно что такоe systemd

xxblx⇓ пишет:

. удобно управлять выполнением и следить за статусом и таймера, и юнита через systemct

Напомните как следить?
И скажите как проверить что в версии именно systemd работает?

Меня тут нет!

6

sevo44 пишет:

Это надо в файл delbackup.sh добавить? а что добавить?

Что нужно логгировать, логгирование того и добавить. Я ведь не знаю что тебе надо сохранять.

sevo44 пишет:

Напомните как следить?

Консоль
systemctl status что-то.service
systemctl status что-то.timer

Fedora & GNOME

7

xxblx⇓ пишет:

Что нужно логгировать, логгирование того и добавить. Я ведь не знаю что тебе надо сохранять.

Ну что то типо того что удалилось какие файлы

Меня тут нет!

8

sevo44 пишет:

Ну что то типо того что удалилось какие файлы

Ну это добавить и надо значит. Если речь про выхлоп удаленных файлов в stdout (через journalctl можно будет stdout почитать, не самый правильный путь, но в твоем случае, думаю, подойдет), то можно обычным echo принтить файлы перед/после удаления, сложного ничего нет.
Если нужно полноценное логгирование, то logger нужно использовать. Но это уже другая история. И в случае с небольшим скриптом на баше я большого смысла в этом не вижу.

Принтить и в stdout, и в файл писать одновременно тоже можно, если использовать tee

Консоль
[xxblx@xxblx-desktop ~]$ echo lol 2>&1 | tee -a /tmp/lol_log
lol
[xxblx@xxblx-desktop ~]$ cat /tmp/lol_log
lol

Fedora & GNOME

9

xxblx⇓ пишет:

Ну это добавить и надо значит.

Теоретически почти понял.  А практически засада smile)))

Меня тут нет!

10

sevo44 пишет:

А практически засада smile)))

В скрипте, где find выполняешь, добавь в конец -print

Fedora & GNOME

11

xxblx⇓ пишет:

В скрипте, где find выполняешь, добавь в конец -print

smile как все просто. но теорию знать необходимо! потому и ценю всегда оба варианта ответа и простой и теоретический

ну и убрать  >/dev/null 2>&1 это как я понимаю и убивает всю информацию
так?

Меня тут нет!

12

sevo44 пишет:

это как я понимаю и убивает всю информацию

Да. Это перенаправляет stdout в /dev/null, а затем перенаправляет stderr в stdout, т.е. по итогу тоже в /dev/null.
https://ru.wikipedia.org/wiki//dev/null

Fedora & GNOME