Я хочу получить письма, хранящиеся на локальном почтовом сервере, из задания cron. Задание выполняет служебную работу для сайта, размещенного на том же компьютере, и в настоящее время выполняется под учетной записью пользователя, настроенной для этого сайта. Проблема в том, что почтовый сервер имеет контроль над папкой, и, очевидно, пользователь, который запускает задание, не может просмотреть файлы в нем.
Если я настрою задание на выполнение под root, код будет запущен хорошо, но я бы предпочел сохранить cron под пользователем сайта.
Я попытался добавить запись acl для этого пользователя с помощью:
setfacl -Rm u:my_user:rw /folder
, и когда я проверяю результат с помощью getfacl , он показывает пользователя в списке, но код (включенный ниже) не работает (без исключений, просто без файлов). Кроме того, я добавил файл вручную, и, очевидно, параметр acl не применяется к новым файлам, поэтому даже если я его запустил, он не будет сканировать новые электронные письма - новые останутся заблокированными для чтения
Хотя, вероятно, это не применимо, cron запускает команду управления django, которая извлекает файлы, используя следующий фрагмент:
l_pendingEmls = []
for box_name in l_mailBoxes.keys():
l_boxData = l_mailBoxes[box_name]
l_emldir = l_mailBoxPath + box_name + '/Maildir/new'
print(l_emldir)
#load files from the box
for dirpath, dirnames, filenames in os.walk(l_emldir):
for f in filenames:
fp = os.path.join(dirpath, f)
# skip if it is symbolic link
if not os.path.islink(fp):
print(fp)
mail = mailparser.parse_from_file(fp)
print(mail.attachments)
print(mail.body)
print(mail.date)
print(mail.subject)
Учитывая, что Я действительно хочу избежать использования root в cron, каковы мои варианты? Я думал о втором задании, которое запускается как root и перемещает файлы, но почтовые ящики, которые я хочу сканировать, настраиваются с сайта, поэтому я не могу по-настоящему настроить вспомогательное задание, если не добавлю действительно уродливый хак с временными файлами , Кроме того, добавление большего количества рабочих мест для обхода разрешений похоже на идею, которая немного менее страшна, чем повышение первоначальной, поэтому я немного застрял
Любые идеи приветствуются, ребята и девчонки
VPS-машина с root ОС доступа: CentOs 6,8, python 3,6 django 2,1