Come posso usare l'arricciatura in un lavoro cron?


12

Devo impostare un processo cron in cpanel che chiama un URL (sullo stesso server) una volta alla settimana. Stavo per usare wget ma si scopre che questo è disabilitato sul server condiviso in uso.

C'è un'alternativa a wget ? Ho sentito che il ricciolo può essere usato ma non so come configurarlo in un comando cron.

Inoltre, qual è il comando per fare in modo che il cronjob non faccia nulla al completamento?

Qualche idea molto apprezzata!


1
Cosa farebbe il wget se potessi usarlo?
user9517

Perché dovrebbero consentire l'arricciatura nel caso in cui abbiano disabilitato wget?
Andol,

@Iain - è necessario per elaborare uno script PHP
davidhyland,

@Andol - ottima domanda. è così
davidhyland,

Risposte:


20

invece di usare wget, curl funziona in questo modo:

curl --silent http://domain.com/cron.php

che funzionerà allo stesso modo di wget. se è un file php che stai lanciando, c'è qualche motivo per cui non puoi eseguirlo tramite l'interprete php della riga di comando in questo modo:

php -q /path/to/cron.php

lo stesso su una richiesta del server web e spesso funzionerà molto più velocemente e senza alcune restrizioni di timeout presenti quando chiamato tramite server web / curl


Chiamare l'arricciatura in questo modo stamperà il risultato su stdout. Se vuoi comportarti in modo equivalente a wget e salvare l'output in un nome file basato sull'URL, vuoi anche aggiungere il flag --remote-name.
andol

significa --silent che non c'è risposta o output?
davidhyland,

1
Inoltre, la chiamata dello script php dalla riga di comando potrebbe non produrre necessariamente lo stesso risultato. Oltre alla possibilità di una diversa configurazione, esiste anche lo scenario non insolito dello script eseguito come utente diverso in quel modo. Tutto dipende dalla configurazione.
Andol,

Bene, l'ho fatto funzionare usando "curl --silent domain.com/script.php > / dev / null 2> & 1" ma funziona anche bene con "curl -o --url domain.com/script.php > / dev / null 2> & 1 "qual è la differenza?
davidhyland,

1
Il primo comando invia tutto l'output a / dev / null, il secondo creerà un file chiamato -urlnella home directory dell'utente che esegue lo script, che contiene l'output del tuo file php, tutti gli altri output vanno a / dev / null.
user9517

6

Se il ricciolo è disponibile potresti provare qualcosa del genere

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

Ciò dovrebbe far sì che il ricciolo sia completamente silenzioso in modo da non ricevere e-mail da esso al completamento.


4
Consiglierei di usare anche l'opzione --show-error, quindi è silenzioso per il normale funzionamento ma produrrà un errore se succede.
emerino,

6

Suggerirei di aggiungere il parametro "-m" oltre a --silent poiché questo parametro imposta il tempo massimo consentito per il trasferimento. Immagina di chiamare cron ogni minuto e che lo script impiega 2 minuti: questo può avere un impatto negativo sul carico del server o su altre cose.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.