Удалите определенные файлы в кроне

Как я могу регулярно удалять определенные файлы в кроне?

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

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

xargs не находит 'комнату'. Это также не найдет '/bin/rm'.

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'

Недостающий аргумент в пользу - исполнительная опция.

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -delete

- удалите опцию, неизвестно, находка должна быть старой.

Ubuntu 16.04 может все еще сделать это? Первая упомянутая версия хорошо работала на 14,04. Возможно, я должен создать отдельный файл сценария оболочки и просто написать его имя в конфигурацию крона, если это - то, что может сделать крон. Все вышеупомянутые команды хорошо работают в интерактивной оболочке удара (возможно, кроме последнего). Просто не в кроне.

1
задан 3 December 2016 в 19:15

1 ответ

Постараться не иметь дело с cronсинтаксис командной строки, не вставляйте команду crontab. Запишите простое bash обертка вокруг команды и вызов сценарий от crontab. Эта обертка позволит Вам настроить среду ($PATH), перенаправление ввода-вывода, обработка ошибок...

Кроме того, я отмечаю, что Вы используете crontab формат, используемый в rootособенный (/etc/crontab, /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.monthly/, /etc/cron.weekly/) установка. Это Ваше намерение? Или Вы используете sudo crontab? Я disrecommend это.

Вы имеете:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

Вам нужно:

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | /usr/bin/xargs -n 200 -r -0 /bin/rm 

Вы имеете:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'  

Вам нужна завершенная точка с запятой ("\;") для завершения -exec:

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}' \;  

"find должно быть старым"? Делает find --version будьте похожи:

 $ find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

Какую версию Ubuntu Вы выполняете? find ... -delete был вокруг в течение долгого времени. Вы BusyBox?

Вот сценарий, который я использую для иллюстрирования некоторых cron проблемы:

(Мое использование среды $HOME/bin и $HOME/var/log):

В $HOME/bin/recordenv:

#!/bin/bash
# Record the environment that a job enjoys
# $1 is the "type" (cron, at, batch, gui, text) are suggested values.
# $1 is NOT validated. Output goes to ${HOME}/var/log/{env,set,alias}.$1
if [[ "$1" ]] ; then
    ext="$1"
    env | sort >${HOME}/var/log/env.$ext
    set        >${HOME}/var/log/set.$ext
    alias      >${HOME}/var/log/alias.$ext
    /bin/ls -l ${HOME}/var/log/env.$ext ${HOME}/var/log/set.$ext ${HOME}/var/log/alias.$ext
else
    echo "User error."
    exit 1
fi

Для использования его звонить $HOME/bin/recordenv cron от crontab.

0
ответ дан 8 December 2019 в 07:32

Другие вопросы по тегам:

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