Autor | Zpráva | ||
---|---|---|---|
UNB Profil |
#1 · Zasláno: 4. 12. 2012, 08:25:57
Potřeboval bych mít radu od Vás, a hledal jsem diskusi a různé weby, a pořád nemám jistotu, proto se tady obrátím na diskusi.
Chci vědět jak postupně udělat CRON PHP? Zaprvé vím, že chci spustit skript - 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /Users/Laborator/Web/skript.php Úvodní index webu je /Users/Laborator/Web/index.php 1. Mám uložit soubor s názvem: cron.php a v souboru bude obsažen 1 řádek: 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /Users/Laborator/Web/skript.php Kám mám vkládat cron.php? Do index.php a tam přidat řádek jako include("cron.php"); ? 2. Co dál? Už to nevím..., prosil bych od Vás radu o postupně krok za krokem. 3. Používám MAMP PRO, OS: Mac OSX Mountain Lion. 4. Nebo je možné používat Windows XP :-) Děkuji a budu se tešit na reakci od Vás. |
||
Joker Profil |
#2 · Zasláno: 4. 12. 2012, 09:16:53
UNB:
V první řadě, CRON nesouvisí s PHP, je to proces operačního systému. Čili to nebude cron.php, ani se nevkládá do PHP souboru. Nevím přesně, kam se v MacOS dává definice pro CRON (crontab?), možná nejjednodušší bude si na to najít v repozitáři nějakou klikací aplikaci. Windows místo CRONu mají Naplánované úlohy, řešilo se to třeba zde |
||
Časová prodleva: 2 roky
|
|||
smiesek Profil |
#3 · Zasláno: 29. 10. 2014, 06:03:57
nerada bych zakládala stejný název tématu a tak svůj dotaz připojím zde.
Stejně jako autor příspěvku se snažím zatím marně dohledat, jak vytvořit cron a jaký je postup vytvoření. Jde mi např. o jednou za týden smazat všechny prázdné adresáře z webu, nebo zaslat jednou za období e-mail, ale prostě netuším prosím odkama se odrazit a úspěšně vše dotvořit, aby to fungovalo, hlavně cron, nejde mi o jednotlivé funkce přikazů jak sestavit kod pro smazání adresáře nebo jak zaslat e-mail, ale spíše jakými parametry a kam nastavit cron. Zkoušela jsem hledat i na internetu, ale nikde se mi nepodařilo najít ukázkový příklad. Děkuji za navedení a pomoc. |
||
Giga Profil |
#4 · Zasláno: 29. 10. 2014, 08:23:39
Cron je služba operačného systému Linux.
Internet poskytuje veľa návodov, napr: www.linuxexpres.cz/praxe/cron-spravca-uloh |
||
juriad Profil |
#5 · Zasláno: 29. 10. 2014, 08:24:50
smiesek:
Ty cron nevytvoříš, cron je služba operačního systému, poskytuje jej webhosting. Originální verze cronu měla konfiguraci v souborech formátu: minuty hodiny dny měsíce dny-v-tydnu příkaz-který-spustit Často ani Cron není poskytovaný (viz třeba pro webzdarma: http://faq.webzdarma.cz/otazka.php?25). Existují ale webové služby, které jako cron mohou fungovat. Nastavíš v nich jak často má robot přistoupit na některou tvou stránkou. Třeba zajistí, že každou hodinu bude spuštěn tvůj soubor udrzba.php ; ten ale může „náhodou“ spustit i kdokoli jiný, a proto bys měla kontrolovat, zda byl spuštěn ve správný čas a případně treba vyžadovat v URL heslo, například: ?pass=123456
|
||
smiesek Profil |
#6 · Zasláno: 29. 10. 2014, 09:14:57
aha, tak asi už tomu začínám rozumnět. Mohu vytvořit tedy stránku, kde bude vložený kod pro danou operaci např. test.php bude obsahovat kod rmdir.
Následně nastavení cronu provedu v administraci hostingu, alespoň takhle jsem to pochopila u poskytovatele (jedná se mi o wedos). Já jsem měla jinak vždy za to, že se nějaký příkaz vkládá třeba do nějakého souboru (.htaccess) |
||
juriad Profil |
#7 · Zasláno: 29. 10. 2014, 09:16:32
Všechno je to popsané ve znalostní bázi: http://kb.wedos.com/webhosting/cron.html
|
||
Časová prodleva: 2 roky
|
|||
smiesek Profil |
#8 · Zasláno: 11. 5. 2016, 06:20:15
pokud se všude dočítám o souboru crontab, je tím myšlena následující podoba crontab.txt? Nebo jakou příponu mají mít tyto soubory crontab?
|
||
TomášK Profil |
#9 · Zasláno: 11. 5. 2016, 09:56:29
Ne. Název souboru, ve kterém je to uložené, tě nemusí zajímat. Edituje se totiž spuštěním programu crontab (crontab -e) nebo přes nějaké jiné rozhraní - na wedosu přes web. Se samotným souborem nikdy přímo nepracuješ.
A pokud by tě to zajímalo, uživatelské crontaby bývají uložené ve /var/spool/cron/<username> , systémové v /etc/cron.* . Ty systémové se editují přímo, ale hádám, že bude chvíli trvat než budeš chtít něco takového dělat.
|
||
blaaablaaa Profil |
smiesek:
Soubory cronu jsou nejspis v /var/spool/cron/, ale to ty vubec nepotrebujes vedet, editujes ho pomoci crontab -e. Pripadne vetsina webhostingu ma napsanou nejakou klikaci webovou spravu. //edit: koukam, ze TomasK uz me predbehl :) |
||
smiesek Profil |
já stejně pořád tomu nerozumím, když se mluví o cronu :(
Nechápu to ani ze žádných článků, co se mi daří vygooglit. Potřebuju názorný příklad pro blbečky. Třeba pro odesílání e-mailu a nebo jednou týdne smazat(vyprázdnit data z tabulky, to je fuk) Musím tedy si napsat do nějakého souboru s příponou .php, např. sendmail.php SQL dotaz, který kdybych zadala jeho URL do prohlížeče (nebo na něj klikla), poslal dle SQL dotazu e-maily a ten cron, který bývá jedno řádkový se pak zadává někde do nějakého souboru a nebo té kliklací správy? Budu mít soubor sendmail.php Obsahem bude mimo jiné i SQL dotaz společně se scripte pro odeslání e-mailu SELECT email FROM osoba řádek cronu bude 0 1 * * * /sendmail.php a co pak? Kam přesně s tím řádkem do nějakého crontabu, nebo té klikací správy? |
||
TomášK Profil |
Základní idea je správně, ale přesné to není. Soubor, který se spustí v cronu musí být spustitelný skript. Ne nutně v php, většinou v bashi. Takový skript, který se provede, pokud ho zadáš na příkazové řádce. Pro php by příkaz vypadal takto (se správnou cestou k php):
0 1 * * * /path/to/php sendmail.php crontab -e . Ten program otevře textový editor, kam je potřeba napsat ten řádek. Po uložení editoru se zapíše na správné místo. Příkazem crontab -l jde zobrazit seznam příkazů, které jsou v crontabu zapsané. Nebo to celé naklikat v administraci.
|
||
smiesek Profil |
#13 · Zasláno: 12. 5. 2016, 04:15:42
a ten program se jak spustí? V jaké administraci?
Jak udělám z php spustitelný script? Omlouvám se, ale vůbec mi nic z toho není jasné a tedy nedokážu nic vytvořit, nevím čeho se chytit. |
||
juriad Profil |
smiesek:
V podstatě jsou dva typu cronu: * ty v operačním systému - ty se chovají přesně jak TomášK popisuje. Ty tě ale ve skutečnosti nezajímají. * hostingové - ty jsou omezené na to, že umí spustit jen PHP skripty. Co tedy dělat? Vytvoř klasický PHP skript pokusny-mailer.php v adresáři [pre]cron; pro pokus a pochopení postačí něco jako toto:
<php if (isset($_GET['heslo']) && $_GET['heslo'] == 'moje-tajne-heslo') { mail('smisek123@seznam.cz', 'Pokus', 'Toto je pokusný e-mail, který se odešle automatikcy každých x hodin pomocí cronu na mém hostingu.'); echo "E-mail byl odeslán"; } Pak v konfiguraci hostingu (tedy v žádných souborech ani pomocí programu crontab) nastavíš: Název: odeslání pokusného e-mailu každou hodinu Spouštět 1x za: 1 hodina Hodiny ve dne: 0 - 23 Dny v týdnu: vše Datum: nevyplnit URL skriptu: http:/<tvoje-subdomena>.<tvoje-domena>/cron/pokusny-mailer.php?heslo=moje-tajne-heslo Cron na hostingu v podstatě simuluje prohlížeč, který přistoupí na adresu: http:/<tvoje-subdomena>.<tvoje-domena>/cron/pokusny-mailer.php?heslo=moje-tajne-heslo v datumy a časy, které jsi nastavila. Zkus tu adresu sama zadat do prohlížeče. Jedná se o úplně obyčejný skript. Nemusiš dělat vůbec nic proto, aby se stal spustitelným. Dokonce tam můžeš zadat: http:/<tvoje-subdomena>.<tvoje-domena>/index.php , což ti bude generovat návštěvu úvodní stránky (jakkoli neužitečné to je).
Zmíním se ještě o obsahu toho skriptu: Ta if podmínka tam je proto, aby někdo náhodou nepřišel na adresu http:/<tvoje-subdomena>.<tvoje-domena>/cron/pokusny-mailer.php a tím ti neposlal e-mail. Je to jen taková ochrana.
Dále jsem tam přidal echo, které v případě spuštění pomocí cronu nikdo nikdy neuvidí, ale když to budeš testovat v prohlížeči, tak se ti bude hodit. Ono by šlo použít třeba funkce ob_* , kterými bys vše, co skript vypíše, zapsala do souboru; takové primitivní logování.
|
||
smiesek Profil |
juriad: super, děkuju, nyní pomalu se dostávám k tomu pochopení, o co mi hned na začátku šlo.
Chápu soubor tak, jak jsi jej podmínkou if i ošetřil, že v opačném případě bych je mohla klidně spustit zadáním URL do prohlížeče a žádný cron bych pak nemusela nastavovat. Nyní mi to je srozumitelné. Ještě bych ráda poprosila, jestli by jsi mi mohl, pokud to není složité pro mě jako laikovi na vysvětlení, jakým způsobem by se udělal a vytvořil (třeba tady by se už někde vytvořilo moje toužebné crontab) přikaz pro cron o kterém píše TomášK a kam by se umístil soubor pokusny-mailer.php, v tom případě, že bych jej chtěla vyzkoušet na localhostingu a nebo bych třeba hosting neměla u wedosu? Děkuju za čas a trpělivost. |
||
juriad Profil |
#16 · Zasláno: 12. 5. 2016, 11:29:45
Pokud se jedná klasický linuxový crontab, php soubor vytvoříš úplně stejně. Ale pozor, bude zpracován pomocí konzolové verze PHP a to má několik odlišností:
* používá se jiná konfigurace PHPjiný soubor php.ini), takže ne vše se musí chovat stejně. Například nemusí být podporovaná databáze (funkce mysql_*, mysqi_*), práce s obrázky, matematika s libovolnou přesností atp. Dobré je si to ověřit pomocí funkce phpinfo, která ti ukáže, kterou konfiguraci PHP používá. * nefungují parametry $_GET, $_POST, $_COOKIE, $_SERVER, protože je z příkazové řádky nemá kdo nastavit; o to se obvykle stará webový server, který spuštěním z cronu obejdeš; tyto paramery lze nahradit pomocí pole $argv (hledej na StackOverflow) Crontab je záznam příkazu, který se má v určitou dobu spustit. Každý záznam má 6 sloupců, které jsou oddělené mezerami: 1. Minute [0,59] 2. Hour [0,23] 3. Day of the month [1,31] 4. Month of the year [1,12] 5. Day of the week ([0,6] with 0=Sunday) 6. Příkaz, který se má spustit Za příkaz, který chceš spustit se považuje celý zbytek řádku. Abys nemusela dělat čachry s nějakým povolováním spuštění atp., tvůj příkaz bude vypadat takto: /cesta/k/programu/php -dalsi-prepinace -f /cesta/v/souborovem/systemu/ke/skriptu/nazev-skriptu.php parametry oddělené mezerami * Přepínače slouží k řečení PHP, co jak má dělat; tebe může zajímat přepínač -c /ceta/k/souboru/php.ini , tímto můžeš vynutit použít stejnou konfiguraci, jako je použitá webovým serverem
* Cesta ke skriptu musí být na souborovém systému, nikoli to, co zadáváš do prohlížeče; například to může být někde v /srv/http/ nebo /var/www/ ; každý systém má webové stránky uložené jinde. Skript může být v systému umístěn kdekoli, nemusí být ve stejném adresáři jako zbytek aplikace, ono je často dokonce lepší ho dát jinam, aby jej z venku nikdo nemohl spustit.
* Parametry, které zadáš za název skriptu najdeš v poli $argv, jak jsem zmínil výše. Celý příklad může tedy být: 0 * * * * /usr/bin/php -f /var/www/smiesek.cz/cron/pokusny-mailer.php A teď to nejdůležitější: crontab edituješ programem crontab s přepínačem -e: crontab -e # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command A jako vždy, příkazy man crontab a man php jsou tvými kamarády.
|
||
smiesek Profil |
#17 · Zasláno: 12. 5. 2016, 12:25:12
takže na localu si funkci cron nevyzkouším?
To, že jsem zase na začátku a vytvořila jsem soubor .php s příkazem, který se má do DB provést, jsem pochopila, ale pak to ostatní už ne. Snad ještě to, že si musím pamatovat cestu, do které složky jsem jej dala, abych na soubor mohla následně odkázat příkazem. Ale kam se nyní zadává ten příkaz? To si vše už pak nastavuju jak tu cestu tak příkaz v tom editoru? Kde jej mám nainstalovaný a kde jej mám umístněný? Na webu, u sebe na PC doma? Nerozumím tomu. |
||
TomášK Profil |
#18 · Zasláno: 12. 5. 2016, 12:44:02
smiesek:
cron je systémová služba, která běží na linuxu. Pokud máš linux, můžeš si na localu cron vyzkoušet. Ve většině distribucí je ve výchozí instalaci. Máš-li windows, pak ne - tam je alternativa Windows Task Scheduler resp. schtasks. Dělá to totéž, ale nastavuje se to jinak. |
||
smiesek Profil |
#19 · Zasláno: 12. 5. 2016, 12:47:08
Dobře, budu se tedy držet toho, že následně to, co jste se mi tady snažili vysvětlit vyzkouším pouze u WEDOS serveru.
Děkuju za váš čas. |
||
Časová prodleva: 7 let
|
0