Как я могу регулярно удалять определенные файлы в кроне?
Я пытаюсь удалить пустые файлы, более старые, чем 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. Возможно, я должен создать отдельный файл сценария оболочки и просто написать его имя в конфигурацию крона, если это - то, что может сделать крон. Все вышеупомянутые команды хорошо работают в интерактивной оболочке удара (возможно, кроме последнего). Просто не в кроне.
Постараться не иметь дело с 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
.