@accountnujen

Какие и как нужно выдать права (и кому), чтобы systemd запускал bash скрипт, который дёргает php?

схема:
systemd сервис каждые 10 минут обращается к bash скрипту, который в свою очередь обращается к php. Задача PHP скрипта скачать видео, обработать его и отправить.

cronbot.service
[Unit]
Description=cronbot online service
[Service]
Type=simple
ExecStart=/var/www/domain.com/bashtophp.sh


cronbot.timer
Description=CronBOT Run every 10 minutes
[Timer]
OnBootSec=1min
OnUnitActiveSec=10min
Unit=cronbot.service
[Install]
WantedBy=multi-user.target


BASH
#!/bin/bash
php -f /var/www/domain.com/camengine.php true

Если открыть скрипт (сайт) через браузер, то всё отработает нормально, но если запустить сервис cronbot.service (или просто запустить из консоли php -f /var/www/domain.com/camengine.php true), то будет вот такая ошибка:
PHP Warning:  file_put_contents(video/20.16.44-20.17.18[M][0@0][0].dav): Failed to open stream: No such file or directory in /var/www/domain.com/camengine.php on line 397
<br />
<b>Warning</b>:  file_put_contents(video/20.16.44-20.17.18[M][0@0][0].dav): Failed to open stream: No such file or directory in <b>/var/www/domain.com/camengine.php</b> on line <b>397</b><br />

То есть файл не может записаться... или не записаться... я не знаю
root@stockholm:~# ls -l /var/www/domain.com/
total 64
-rwxr-xr-x 1 root     root        61 Jan  4 20:25 bashtophp.sh
-rw-r--r-- 1 root     root      6760 Jan  4 20:01 cambot.php
-rw-r--r-- 1 root     root     37157 Jan  4 20:15 camengine.php
-rw-r--r-- 1 www-data www-data    23 Jan  4 15:41 index.php
-rw-r--r-- 1 www-data www-data    26 Jan  4 16:08 robots.txt
drwxrwxrwx 2 www-data www-data  4096 Jan  4 20:40 video


Как видите, пытался выбрать права 777 для папки video - не помогло. Скажите, куда копать?
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 2
@humoured
Вы всё на свете найдёте в коробке с карандашами
Проблема не в правах доступа, а в относительном пути, который указан параметром для file_put_contents().
Решение в лоб: использовать полный путь к директории.
Альтернативных несколько:
  1. в начале php-скрипта вызывать функцию chdir и передавать ей путь к директории, где должна лежать папка video (и из, которой, видимо, запускается php-скрипт — в таком случае можно сделать chdir(__DIR__);)
  2. контролировать путь при запуске php-скрипта в bash-скрипте: cd /path/to/dir && php /path/to/file.php
Ответ написан
shambler81
@shambler81 Куратор тега Linux
бро ты не то делаешь и не там.
1. Пхп на сайте может отличатсья от пхп в консоли, как представлением так и версией.
2. Переменные среды тоже отличаются.
3. Если работает с браузера то что тебе мешает вместо
php -f- к которому кстати в кроне нужно писать полный путь.
Заменить на wget или curl уже с сайта ? ( кстати тоже с полным путем)
ты получишь тем самым именно свой пхп и свою переменную среду
А главное Те же права на файлы что и у сайта ( и да они тоже отличаться могут)

ps
ДА и вообще не понятно зачем тебе системд, все что ты описал тупо банальная строчка в
crontab

pps
А че у тебя с правами на php файлы че у них владельцы и группы разные ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы