Что ж, проблема простая. У меня есть сайт, основанный на apache, и я пытаюсь выполнить задание cron на этом сайте с того же сервера. Скажем мой сайт http://example.com и cronjob
/usr/bin/curl http://example.com/cron.php
Не работает, ошибка «curl: (7) не удалось подключиться к хосту».
Почему это могло произойти?
P.S. Сайт работает нормально и доступен с любого другого внешнего компьютера / клиента.
Вот результат iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
Ошибка Ping: (ping example.com) - здесь я, конечно же, использовал домен своего сервера:
134 packets transmitted, 0 received, 100% packet loss, time 136759ms
Подробный curl -v:
* About to connect() to myserver.com port 443 (#0)
* Trying x.x.x.x... Connection timed out
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host
x.x.x.x - это внешний IP-адрес моего хоста.
Результат traceroute myserver.com
traceroute to myserver.com (x.x.x.x), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
Не совсем ответ на текущую проблему, но она будет всем вопрос спорной, так как вы пытаетесь запустить скрипт из того же хоста работает ваш сайт в любом случае:
Когда вам нужно запускать скрипты PHP из cron
обычно лучше запускать их из интерфейса командной строки PHP, чем делать веб-запрос к скрипту. В зависимости от расположения двоичного файла PHP измените пакетное задание на:
/usr/bin/php -q -f /path/to/cron.php
Это позволяет вам:
и больше.
Я понял, что это проблема "шпильки DNS". Лучшее решение, которое я думаю, настроить NAT, чтобы не сокращать запрос с моего внешнего IP на локальный IP ... но все же мой провайдер этого не сделал, и я временно исправил его
nano /etc/hosts
добавил строку
y.y.y.y myserver.com
где y.y.y.y - мой МЕСТНЫЙ адрес.
Внимательно посмотрите на фактическую работающую конфигурацию iptables
ipatables -L -vn
и убедитесь, что ничто не блокирует исходный IP-адрес системы, выполняющей команды curl / ping, - примите соответствующие меры.
Если там ничего нет, то что-то в восходящем направлении, между системами может блокироваться. Поскольку пинг блокируется, я думаю, вы можете попробовать mtr
mtr -4 example.com
Это может означать, что сайт вас блокирует.
Вы уверены, что IP-адрес example.com тоже правильный?