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
Я бы использовал ЕДИНСТВЕННЫЕ кавычки, а не ДВОЙНЫЕ, чтобы предотвратить любую возможность расширения метасимвола '*'.
- Чтобы запустить задание PHP cron,
www-data
должен сделать работу crontab сам, используяphp -f
как [пользователь] внутри строки cronjob:
*/15 * * * * php -f /var/www/nextcloud/cron.php
(Это инструкции Nextcloud. Они поняли это правильно, не пытайтесь взломать это, в моем случае.)
www-data
должен запускать само задание cron как crontab (не/etc/cron.d
, и другие)
Обычно это устанавливается с терминала:
Работает как root
в этом примере...
crontab -u www-data -e
... добавить строку cronjob (выше).
crontab -u www-data -l
... и оно должно совпадать.
Но мне нужно сделать это как скрипт, а не crontab -e
в терминале.
- Сделайте это через шеллскрипт (опасность?):
задания 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
О счастливый день!