Назад | Перейти на главную страницу

Crontab не работает как apache

У меня есть задание cron, которое запускает скрипт PHP и создает файлы (изображения). Но задание cron выполняется как меня (будучи меня мое собственное имя пользователя), а не apache, никто, httpd, www ... и все созданные файлы принадлежат этому пользователю.

Если я запускаю тот же сценарий через браузер, он запускается как apache. Я тестировал это с whoami и проверил права доступа к файлу.

Проблема в том, что если я разработаю веб-интерфейс для удаления файлов (именно так пользователи / администратор смогут управлять изображениями), он будет работать как apache и не сможет удалить файлы, как apache. не владелец и не принадлежит к той же группе, что и меня.

Как правильно с этим справиться?

Лучше всего запустить задание cron от имени пользователя apache:

sudo crontab -u apache_user -e

Это более чистое решение по сравнению с выполнением задания как ты, потому что то, что принадлежит apache, должно оставаться таким. Смешивание пользователей приведет к беспорядку и в какой-то момент может вызвать проблемы.

Есть разные решения:

  1. Добавьте своего пользователя в группу apache www-data, nobody, или как он там называется в вашей системе. Вам также необходимо предоставить группе разрешение на запись.
  2. Запустите задание cron под пользователем apache. Это можно сделать с помощью такой команды: sudo su apache_user -c "crontab -e". Однако это может не сработать в зависимости от того, разрешено ли переключаться на пользователя apache и добавлять задания cron для apache_user.

Я думаю, что пункт 1 должен быть лучше.