4

У меня есть задание cron, вызывающее скрипт bash, который работает нормально, за исключением одной строки внутри, которая предполагает удаление всех штрафов в каталоге. Результатом этой строки всегда является «нет такого файла или каталога», хотя я много раз проверял, что в этом каталоге есть файлы. Рассматриваемая строка так же проста:

rm /dir1/dir2/dir3/*

Скрипт отлично работает при запуске вручную в терминале, поэтому он должен быть чем-то похожим на то, как запускается cron. Я попытался дать 'dir3' и всем файлам внутри него каждое возможное разрешение, поэтому это не должно быть проблемой с разрешениями. (Каталог и файлы также принадлежат пользователю). Я попытался указать SHELL =/bin/bash внутри crontab. Не установлен липкий бит и псевдоним в команде rm.

Интересно, что изменение команды 'rm' на 'ls' дает тот же отрицательный результат (если вы не удалите завершающий '*', и тогда это сработает).

Что мне здесь не хватает?

4 ответа4

3

В конце концов, оказалось, что я плохой. То, что я на самом деле имел в сценарии:

rm "/dir1/dir2/dir3/*"

Я не понимал, что кавычки будут блокировать расширение подстановочных знаков, поэтому я никогда не включал их в вопрос. Удаление кавычек устранило проблему, поскольку я уверен, что было бы указано мне, если бы я включил их. Хотя я не уверен на 100%, как нужно обрабатывать пробелы в пути без кавычек.

0

Что вы получаете, когда используете rm -v /full/path/to/directory/* , и на что распространяется этот глобус? Возможно, аргументов слишком много - если так, используйте что-то вроде find /full/path/to/directory -delete; mkdir -p /full/path/to/directory

0

Попробуйте поместить следующее в скрипт и вызвать его из вашей работы cron.

#!/bin/bash
rm -rf /full/path/to/dir/*

Задание cron, вероятно, не выполняется, так как вы используете rm без опции -f (force). Каждый раз rm будет спрашивать, уверены ли вы, что хотите удалить файл.

Добавленная опция -r (рекурсивная) гарантирует, что все каталоги в /full /path /to /dir / также будут удалены.

Справочную страницу rm можно найти здесь.

0

Вы не сказали, в какой операционной системе вы работали, но может ли SELinux вмешиваться?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .