Сервер Ubuntu 16.04.5 LTS
У меня есть сценарий python, который создает файлы журнала, используя следующий код:
today = datetime.today()
datem = datetime(today.year, today.month, today.day)
logger = logging.getLogger('processImport')
hdlr = logging.FileHandler('{0}myLog_{1}-{2}-{3}.log'.format(myLogFileLocation, datem.year, datem.month, datem.day))
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
сохранение записи журнала с помощью:
logger.info(logMessage)
Затем у меня есть задание cron, которое удаляет старые файлы журнала через определенный период, выполняя файл python, который использует os.remove(fullFilePath) для удаления файла.
Однако при выполнении этого задания cron я получаю сообщение об ошибке с разрешениями.
OSError: [Errno 13] Permission denied: PathToTheFile\theLogFileName.log
Когда я проверяю разрешения для файла, они установлены на:
-rw-r--r-- 1 www-data www-data etc etc
Что мне нужно сделать, чтобы задание cron получило разрешение на удаление файлов журнала?
Спасибо.






Кажется, есть разрешение на запись в папку. Смена разрешения должна помочь.
Попробуй это:
log_dir = '/abs/path/of/directory'
os.chmod(log_dir, 0777)
Дай мне знать, как дела.
Спасибо, решено. Это были разрешения на родительскую папку. Я изменил их с помощью chmod 777 DirName непосредственно с терминала, а не с помощью python (я пробовал это вчера и, думаю, по тем же причинам, что и с ошибкой разрешений).
Это очень плохая идея, так как разрешения слишком свободны. Теперь у всех есть права создавать и удалять там файлы. Помимо уничтожения файлов журнала, чтобы скрыть попытки взлома, можно также заменить их символическими ссылками и заставить демон затем записывать в другие файлы, к которым пользователь также не имеет доступа.
В Python 3 вам нужно префикс режима (если восьмеричный) с 0o: os.chmod(log_dir, 0o777)
Я думаю, вам нужны разрешения (
+w) для файла и (+x) для родительского каталога.