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

Задание Cron игнорирует часть URL-адреса триггера

Я создал задание cron для запуска URL-адреса в заданное время, которое, в свою очередь, запускает скрипт импорта продукта. Но по какой-то причине часть URL-адреса триггера с параметрами удалена.

Я установил задание cron так:

/usr/bin/wget -O /dev/null http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX&import_id=3&action=processing

Но это только работает http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX. Где последняя часть, которая фактически говорит сценарию, что делать?

Кто знает, почему он так себя ведет и как заставить его работать?

Символ амперсанда (&) на самом деле что-то означает в Linux (ну, в Bourne-совместимой оболочке). Это означает: запустить команду как фоновую задачу.

Из-за этого вы фактически говорите cron запустить /usr/bin/wget -O /dev/null http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX в фоновом режиме, а затем сделать action=processing. И это то, что cron делает для вас - то, что вы ему сказали.

Чтобы обойти это, вам нужно избежать & символ, так что он обрабатывается как часть URL-адреса, а не интерпретируется как управляющий символ.

Самое простое решение - заключить URL-адрес в кавычки.

В дополнение к уже упомянутому амперсанду вы также должны быть осторожны с % символ в записи cron. % запись в cron будет интерпретироваться как разрыв строки и должна быть экранирована обратной косой чертой (\%). Убедитесь, что import_key что вы подверглись цензуре, не имеет такого характера. Кроме того, URL-адреса часто содержат % в них, чтобы избежать определенных символов, таких как пробел (), =, и т.д.