BASH-создать crontab 'www-data', который запускает файл PHP

Мне нужно, чтобы это работало в файле cron в /etc/cron.d/:

*/15 * * * * php -f /var/www/nextcloud/cron.php

... но мои сценарии не запускаются. Его разрешения установлены на 644, и мне нужно создать его с помощью сценария Shell/BASH. Я использую:

echo "* / 15 * * * * php -f /var/www/nextcloud/cron.php"> /etc/cron.d/nccron

Что я делаю неправильно?

2 ответа

Решение

Существует гораздо более простой способ (должно быть сделано как root пользователь)

echo '*/15 * * * * www-data php -f /var/www/nextcloud/cron.php' > /etc/cron.d/wwwcron

Я бы использовал ЕДИНСТВЕННЫЕ кавычки, а не ДВОЙНЫЕ, чтобы предотвратить любую возможность расширения метасимвола '*'.

  1. Чтобы запустить задание PHP cron, www-data должен сделать работу crontab сам, используя php -f как [пользователь] внутри строки cronjob:

*/15 * * * * php -f /var/www/nextcloud/cron.php

(Это инструкции Nextcloud. Они поняли это правильно, не пытайтесь взломать это, в моем случае.)

  1. www-data должен запускать само задание cron как crontab (не /etc/cron.d, и другие)

Обычно это устанавливается с терминала:

Работает как root в этом примере...

crontab -u www-data -e... добавить строку cronjob (выше).

crontab -u www-data -l... и оно должно совпадать.

Но мне нужно сделать это как скрипт, а не crontab -e в терминале.

  1. Сделайте это через шеллскрипт (опасность?):

задания crontab находятся в: /var/spool/cron/crontabs/USER

с разрешениями: -rw------- ... www-data crontab

Сценарий, который работал:

Работает как root в этом примере...

echo "*/15 * * * * php -f /var/www/nextcloud/cron.php" >> /var/spool/cron/crontabs/www-data
chown www-data:crontab /var/spool/cron/crontabs/www-data
chmod 600 /var/spool/cron/crontabs/www-data

О счастливый день!

Другие вопросы по тегам