cron tiedosto Cron — ajaa käyttäjäohjelmia tiettyyn aikaan. Kuinka saada virheilmoituksia cronin suorittamista ohjelmista

8. huhtikuuta 2015 klo 11.57

PHP-skriptin suorittaminen cron-aikataululla. Kun kaikki ei ole niin selvää

  • PHP
  • Verkkosivujen kehitys

Tässä artikkelissa puhun joistakin hienouksista käynnistä php- isännöintisivustoilla olevat skriptit, joiden tietämättömyys voi pilata paljon hermoja sekä aloitteleville ohjelmoijille että keskitason ammattilaisille.
Syy tämän artikkelin kirjoittamiseen: ongelmia komentosarjojen suorittamisessa isännöinnissä erilaisia ​​asetuksia. Ja koska asetukset voivat vaihdella, annetut tiedot yleisiä tapauksia voi olla sopimatonta ja harhaanjohtavaa.

Pientä teoriaa näissä linkeissä: ja niille, jotka haluavat virkistää muistiaan.

Tapaus yksi

Asetuksissa käyttöjärjestelmä oletuspolkuja ei ole määritetty. Tämän seurauksena seuraavaa cron-komentoa ei suoriteta.

Php /var/www/LOGIN/data/www/SITE/cron.php
Oikea komento olisi toinen vaihtoehto, jossa kirjoitamme koko polun php-tulkkiin.

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php
On useita muita tapoja aloittaa php-skripti ja kuvatut. Mielenkiintoista tässä on, että php-skripti toimii tiedostona konsolin komentoineen ja tähän voit kirjoittaa koko joukon komentoja ja kuvata kaikenlaisia ​​vaihtoehtoja jokaiseen makuun. Koodi näyttää tältä.

#!/usr/bin/php
Suorituskomento cronissa määrittää skriptin polun eikä mitään muuta. Symbolit #! sijoitetaan skriptiin, ja sitten kirjoitamme tarvitsemamme komennot bashissa.

Tapaus kaksi

Komentosarjan suorittaminen selaimelta pyydettäessä johtaa sivun näyttämiseen selaimessa. Ja kun komentosarja suoritetaan cronin kautta, se johtaa sivun tekstin tulostukseen komentoriville. Tässä voi olla useita vaihtoehtoja. Järjestelmä voidaan määrittää tallentamaan tulos konsoliin tiedostona. Lisäksi tämä tiedosto ei välttämättä sijaitse tyypillisimmässä paikassa. Tämä voi vähitellen täyttää kaiken levytilan. Usein sivustolle annetaan tilaa 1 gigatavu, 500 megatavua. Ja sivustolle oli jopa 50 ja 10 megatavua isännöintiä.

Vaihtoehtoisesti lähtö voidaan ohjata uudelleen Postilaatikko, jonka huolehtiva isännöitsijä esitteli sinulle huomaamattomasti ja rekisteröi isännöintiasetuksiin oletussähköpostiksi. Joka kerta kun komentosarja suoritetaan, kaikki konsoliin lähetettävä teksti muotoillaan kirjaimeksi. Ongelmat voivat alkaa yllättäen. Jos cron-työtä suoritetaan usein ja isännöivässä sähköpostissa on rajoitettu sähköpostien määrä päivässä, sähköposti yksinkertaisesti epäonnistuu (palveluntarjoaja estää sen mahdollisena roskapostittajana). Ja miten epämiellyttäviä seurauksia saat käyttäjien rekisteröinnin kieltäytymisen, käyttäjille ilmoituksen jne., jotka lähetetään sähköpostitse.

Ratkaisu on yhtä vanha kuin aika. On tarpeen ohjata ulostulo konsolista tyhjään tilaan. Tämä tehdään lisäämällä komento cron-komennon loppuun.

>>/dev/null 2>&1
Joskus hosting-järjestelmänvalvojat ottavat tehtäväkseen asentaa ne huomaamattomasti käyttäjälle. Tässä voi myös olla sudenkuoppa.

Tapaus kolme

Tilanne on yksinkertainen. Meidän on korjattava ajoitusohjelman käynnistämä komentosarja. Voit yrittää tehdä tämän käyttämällä php:tä, pakottaa komentosarjan kirjoittamaan lokeja jne. Mutta on paljon yksinkertaisempi tapa, sinun on ohjattava tulos tiedostoon. Käsky on yksinkertainen, lisäparametri meidän tiimiin:

>
Se on lisättävä komennon loppuun:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html
">"-merkki kertoo järjestelmän ohjaamaan lähdön uudelleen. Seuraava on tiedoston nimi. Meidän tapauksessamme se on osoitettu absoluuttinen polku. Tätä esimerkkiä ei ole vaikea löytää Internetistä. Mutta tässä saattaa meitä odottaa toisesta tapauksesta johtuvat ongelmat. Huomaavainen isännöitsijä lisää automaattisesti tulosteen uudelleenohjauksen rivimme loppuun. Ja joskus se peittää sen. Tuloksena on komento, kuten:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html >/dev/null 2>&1
Tämän seurauksena tuloste ohjataan uudelleen tyhjään tilaan ja tulostetiedosto on tyhjä. Täällä voit osoittaa isännöitsijälle hänen virheensä, että hän oli liian älykkäämpi asetusten kanssa. Tai voit käyttää heti kainalosauvaa. Kun olet ohjannut tiedostoon, lopeta komento &&-merkeillä. Näitä kahta merkkiä käytetään komentorivillä yhdistämään useita komentoja yhdelle riville. He kertovat komentoriville, että komento on ohi ja seuraava komento on tulossa. Siihen sovelletaan uudelleenohjausta tyhjyyteen. Tämän seurauksena uudelleenohjaus tyhjyyteen säilyi ja lokitiedosto kirjoitettiin oikein. Esimerkkikomento:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html && >/dev/null 2>&1

Tapaus neljä

Skripti käynnistyi, mutta ei toimi oikein. Syy tähän on php tulkki kun paeta pois komentorivi alkaa toimia väärin määritetyssä ympäristössä, joka on erilainen kuin se olisi toiminut HTTP-palvelimen kautta. Ensimmäinen merkki on, että komentosarja ei löydä tiedostoja, jotka ovat samassa hakemistossa kuin se, vaan alkaa katsoa olevansa käyttäjän juurihakemistossa, joka on useita kansioita korkeampi kuin sivuston juurihakemisto. Ensimmäinen asia, joka on tarkistettava vaihteleva ympäristö ja super globaali joukko$_SERVER.

Ensimmäinen asia, jonka löydät Internetistä tästä ongelmasta, on neuvo kirjoittaa hakemistonmuutoskomento kruunuun:

Cd /var/www/LOGIN/data/www/SITE/
Mutta joissakin tapauksissa tämä ei auta. Siellä on uloskäynti. Yksi niistä on ottaa kaikki omiin käsiisi ja asettaa puuttuva ympäristö käsikirjoituksen toimimiseksi. Tästä on jo enemmän tietoa Internetissä.

Joskus sinun tarvitsee vain kirjoittaa seuraava koodi komentosarjan alkuun ja polut alkavat taas toimia.

$polku_osat = polkutieto($_PALVELIN["SCRIPT_TIEDOSTONIMI"]); // määrittää komentosarjahakemisto chdir($polku_parts["dirname"]); // aseta komentosarjan suoritushakemisto
Kuten näet, kaikki on kirjoitettu funktioihin, eikä asetusten kanssa tarvitse vaivautua.

Johtopäätös

Siinä kaikki. Ongelmat ja ratkaisut eivät ole triviaaleja ja yleensä tällainen yhdistelmä epäonnistuneet asetukset harvoin esiintyy. Onnea projektien käyttöönotossa ja muutossa.

Äskettäin minun piti asettaa ajoitettu tehtävä palvelimelle, ja ensimmäisellä kerralla se oli vaikeaa ja jopa pelottavaa. Siksi päätin kirjoittaa artikkelin Cronin perustamisen vaiheista. Luomme yksinkertaisen PHP-skriptin lähetettäväksi Sähköposti kerran päivässä.

Vaadittava perustaso

  • Peruskokemus komentoriviltä;
  • Taidot työskennellä SSH:n kanssa Linux-palvelimella.

Tehtävät

  • Opi määrittämään yksinkertainen ajoitettu tehtävä (cron-työ) Linux-palvelinympäristössä;
  • Määritä cron-tehtävä lähettääksesi sähköpostia päivittäin osoitteessa määrätty aika.

Sähköpostin lähettäminen PHP:llä

Ensin sinun on luotava yksinkertainen PHP-skripti testataksesi Cron Linux -asennusta. Aion luoda tiedoston, joka lähettää sähköpostin:

Jos et ole perehtynyt PHP sähköpostitoiminto() Tarkista virallinen dokumentaatio . Asetan muuttujia, jotka määrittävät vastaanottajan, sähköpostiosoite lähettäjä, aihe, viestin sisältö ja otsikot. Se ei ole nykyaikaisin tai turvallinen tapa sähköpostin lähettäminen. Mutta se toimii, joten aion käyttää sitä testaukseen. Tallennamme koodin cron.php-tiedostoon.

Polku julkiseen kansioon riippuu Linux-jakelu, mutta asetin cron.php-tiedoston kansioon /var/www/html/crontest. Joten koko polku käsikirjoitukseeni on seuraava: /var/www/html/crontest/cron.php. Voit testata tätä komentosarjaa suoraan selaimessa. Jos sivustosi on example.com, tiedoston osoite on todennäköisesti example.com/crontest/cron.php. Jos suoritat tiedoston ja saat sähköposti, mikä tarkoittaa, että skripti toimii.

Localhostia ei ole määritetty lähettämään PHP-sähköpostia, joten tämä komentosarja on suoritettava Linux-ympäristöstä.

Cronin perussyntaksi

Siellä on hyödyllinen sivusto nimeltä Crontab Generator, joka voi määrittää PHP Cronin, mutta ensin tarkastellaan nopeasti perussyntaksia.

Esimerkki Cronin juoksemisesta:

* * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1

cron-komennon osat

cron-komento koostuu neljästä pääosasta:

Toteutusaika Toteutus PHP polku komentosarjaan Tulos * * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1

läpimenoaika— asettaa minuutit, tunnit, päivät, kuukaudet ja viikonpäivät.

Suoritus - cron-tehtävän tulee kutsua PHP:tä, joka sijaitsee /usr/bin/php-kansiossa.

Polku komentosarjaan - suoritettavan tiedoston täydellinen polku.

Tulos (valinnainen) - voit kirjoittaa tuloksen tiedostoon tai hylätä tämän osan > /dev/null 2>&1 .

Yllä olevassa esimerkissä Linux Cron -tehtävä on määritetty lähettämään sähköposti joka minuutti joka päivä. Asteriski on jokerimerkki, joka edustaa "kaikkia".

  • Minuutit - aseta minuutit 0 - 59;
  • Kello - aseta kello 0 - 24;
  • Päivät - aseta päivä 1 - 31;
  • Kuukaudet - aseta kuukausi 1-12 (tammi-joulukuu);
  • Viikko - aseta viikonpäivä 0-6 ( Sunnuntai lauantai).

Tässä muutamia yksinkertaisia ​​esimerkkejä:

Syntaksi Selitys 0 * * * * suoritetaan kerran tunnissa (joka tunnin nolla minuutti). 0 0 * * * toimii kerran päivässä (keskyöllä joka päivä minuutilla nolla). 0 0 1 * * kulkee kerran kuukaudessa (joka kuukauden ensimmäisenä päivänä keskiyöllä minuutilla nolla). 0 0 1 1 * pyörii kerran vuodessa (ensimmäisen kuukauden ensimmäisenä päivänä keskiyöllä minuutilla nolla).

On myös muita asetuksia, kuten parittomille/parillisille päiville, 5 minuutin välein jne. Saatavilla on myös monia resursseja, joista voit etsiä tiettyjä asetuksia.

Cron-tehtävän määrittäminen

Jos cron on määritetty alla tili root, sinun on suoritettava sudo ennen koodin suorittamista.

cron-komentoa kutsutaan crontabiksi. Asetamme tehtäväksemme lähettää sähköpostia kerran päivässä, joten täysi joukkue tulee olemaan näin:

0 0 * * * /usr/bin/php /var/www/html/crontest/cron.php >/dev/null 2>&1

Kun olet kirjautunut sisään SSH-palvelin, voit tarkistaa, onko muita käynnissä olevia tehtäviä. Tämä voidaan tehdä käyttämällä seuraavaa komentoa.

crontab -l crontab: ei crontabia käyttäjälle

Nyt muokkaamme crontabia:

Tässä vaiheessa työskentelet todennäköisesti vi-editorissa, jos et ole koskaan muuttanut palvelimesi oletuseditoria. Kun määrität Cronin ensimmäisen kerran, se voi olla hieman hämmentävää.

Toimi seuraavasti:

  1. Paina esc;
  2. Paina i aloittaaksesi tiedoston muokkaamisen;
  3. Liitä cron-komento tiedostoon;
  4. Paina esc uudelleen poistuaksesi muokkaustilasta;
  5. Kirjoita :wq tallentaaksesi muutokset tiedostoon ( w - kirjoittaa) ja poistu ( q - lopeta).

Nyt crontab on tallennettu ja sähköposti tulee lähettää kerran päivässä keskiyöllä. Voit asettaa * / 5 * * * * - 5 minuutin välein tarkistaaksesi sen toiminnan.

Voit myös lisätä tiedostoon useita cron-tehtäviä. Voit tehdä tämän asettamalla kukin komento erilliselle riville.

Artikkelin käännös " Cronin perustyön määrittäminen Linuxissa» ystävällinen projektitiimi

Unix-tyyppisissä käyttöjärjestelmissä on mahdollista ajaa käyttäjäohjelmia käyttäjän määrittelemänä aikana. Tätä varten käytetään cron-tehtäväajastinta, joka vastaanottaa ohjeita käyttäjiltä ja suorittaa kaikki tehtävät vastaanotettujen komentosarjojen mukaan. Asiakkaamme voivat käyttää tätä ominaisuutta säännöllisten tehtävien suorittamiseen.

Cronin määrittäminen ISPmanager 5 -paneelin avulla

Aseta cron-skriptit osion ohjauspaneelin kautta Järjestelmä → Aikataulu

Lisää uusia tehtäviä napsauttamalla "Luoda". Interaktiivinen cron-skriptieditori avautuu:


Kentällä "Tiimi" määritä suoritettavan komentosarjan tai komennon täydellinen polku (for järjestelmän komennot Koko polkua ei ehkä ole määritetty). Esimerkiksi koko polku script.pl-tiedostoon, joka sijaitsee sivuston juuressa, näyttää tältä:

/var/www/u12345/data/www/script.pl

Varmista, että suoritettavalla tiedostolla on luku+suoritus (r+x) -oikeudet tiedoston omistajalle. Voit muuttaa käyttöoikeudet tarvitsemiisi komennolla:

Chmod 750 script.pl

Kentällä "Kuvaus" voit tehdä muistiinpanon, jotta et unohda, mitä tämä kirjoitus tekee

Pohja- valitset riviltä yhden listatuista vaihtoehdoista "Juosta": tunnin välein, päivittäin, viikoittain, kuukausittain, vuosittain, käynnistyksen yhteydessä.

Asiantuntija - joustava asennus aloitustaajuus: minuutit, tunnit, kuukauden päivät, kuukaudet, viikonpäivät (0 - sunnuntai). Syöttömuoto: * - kaikki minuutit; */n - n minuutin välein; n - minuutin n alusta; a,b,c-e - minuuttien a,b,c,d,e alusta

Esimerkkejä käynnistystaajuuden asettamisen perustilasta:



Esimerkkejä asiantuntijatilasta käynnistystaajuuden asettamiseen:

  • suorita tehtävä kerran tunnissa klo 05 minuuttia

  • suorita tehtävä maanantaisin klo 1:15

  • suorita tehtävä 5. huhtikuuta klo 0 tuntia 1 minuutti joka vuosi

Kun kaikki kentät on täytetty (paitsi "Kuvaus", se on valinnainen), napsauta "OK".

Raporttien lähettäminen sähköpostitse skriptin suorittamisesta

Määritä ilmoitukset määrittämällä sähköposti, johon lähetetään ilmoitukset skriptin suorittamisesta. Voit tehdä tämän siirtymällä osioon "aikataulu"


Napsauta painiketta "Asetukset" ja kentällä « Sähköpostiosoite» määritä sähköposti, johon ilmoitukset komentosarjan suorittamisesta tulee lähettää.


Varmista komentosarjan asetuksissa, että vieressä oleva ruutu "Älä lähetä raporttia sähköpostitse".

Kuinka määrittää cron yli ssh

Cron-skriptit konfiguroidaan kautta unix-kuori. Selvitä, mitkä ohjelmat on käynnistettävä, ja selvitä niiden täydelliset polut palvelinlevyltä. Voit tehdä tämän navigoimalla cd-komennolla hakemistoon, jossa käyttämäsi ohjelma sijaitsee, ja selvittämällä koko polun tähän hakemistoon pwd-komennolla. Polku saattaa näyttää tältä - /home/u12345/scripts/script.pl.

Varmista, että tiedostolla on luku+suoritus (r+x) -oikeudet käyttäjälle, jolla käytät komentosarjaa. Voit muuttaa käyttöoikeudet tarvitsemiisi komennolla chmod 750 script.pl

750 - täydet oikeudet tiedoston omistaja, ryhmä - lukeminen ja suoritus, muut - pääsy on estetty.

Suorita komento crontab -e – ajastin muuttaa sen käyttäjän suunnitelmaa, jonka nimellä käytät cronia. Kun käynnistät sen ensimmäisen kerran, sinua pyydetään valitsemaan tekstieditori. Valitse jo tuttu editori. Esimerkkinä harkitsemme tekstieditori vi. Kun olet kirjoittanut komennon, olet vi (n) -tekstieditorissa, johon voit kirjoittaa cron-skriptin tekstin.

Pikaviittaus vi-editoriin:

  • lisätäksesi tekstiä, paina i ja kirjoita teksti
  • Voit poistaa merkkejä painamalla ESC-näppäintä ja kirjoittamalla sitten x
  • Jos haluat poistua vi:stä tallentamatta muutoksia, paina ESC ja kirjoita:q!
  • Tallenna ja poistu painamalla ESC ja kirjoittamalla:wq

Cron-työt kirjoitetaan yksi kullekin riville. Muista painaa enteriä jokaisen rivin jälkeen, myös viimeisen tai vain yhden rivin jälkeen, muuten tehtävät eivät toimi.

Tehtävä näyttää merkkijonolta. Alussa on viisi pakollista kenttää, jotka on erotettu välilyönneillä ja jotka osoittavat työn tiheyden. Seuraava on suoritettava komento:

kenttä1 kenttä2 kenttä3 kenttä4 kenttä5 joukkue

Viiden ensimmäisen kentän arvot:

  • minuuttia - numero 0-59
  • tunnit - numero 0-23
  • kuukauden päivä - numero väliltä 1-31
  • vuoden kuukauden numero - numero 1-12
  • viikonpäivä - numero 0-7 (0-su,1-ma,2-ti,3-ke,4-to,5-pe, 6-la, 7-su)

Kullekin tietylle parametrille voit määrittää useita pilkuilla erotettuja arvoja. Jos esimerkiksi kirjoitat "tunnit"-kenttään 1,4,22, tehtävä suoritetaan klo 1, 4 ja 22. Voit asettaa välin - 4-9 tarkoittaa, että ohjelma on käynnistettävä tunnin välein 4-9 tuntia mukaan lukien.

Symboli «*» tarkoittaa "kaikki mahdollisia arvoja" Tähti «*» "tunnit"-kentässä tarkoittaa "juokse joka tunti". Symboli «/» ilmaisee tehtävän lisätiheyttä. Esimerkiksi, "*/3""tunnit"-kentässä tarkoittaa kolmen tunnin välein. Jos "kuukauden päivä"- ja "viikonpäivä"-kentät on määritetty (ei yhtä suuri kuin *), tällainen tehtävä suoritetaan jokaisena määritetynä viikonpäivänä kuukauden päivästä riippumatta.

13 13 10 * 5 /home/u12345/script.pl

tällainen komento suoritetaan kello 13:13 joka perjantai ja joka kuun 10. päivä, vaikka 10. päivä ei olisikaan sama kuin perjantai.

Cron antaa sinun ajaa skriptejä järjestelmän käynnistyessä - määritä @reboot skriptin alussa suoritustaajuuden sijaan:

@reboot /home/u12345/script.pl

Tältä yksinkertainen cron-skripti näyttää:

0 */3 * * 2.5 /home/u12345/script.pl

Komentosarja /home/u12345/script.pl suoritetaan automaattisesti kolmen tunnin välein tiistaisin ja perjantaisin. Kirjoita tällainen skripti vi-editoriin, poistu ja tallenna muokkaustulokset. Tehtävä suoritetaan määritetyllä tiheydellä, jos et ole tehnyt virheitä.

Cron raportoi skriptin virheistä:

/tmp/crontab.xxxxxxx: 1 rivi, 9 merkkiä crontab: uuden crontabin asentaminen "/tmp/crontab.xxxxxxx":1: huono minuutti crontab: virheitä crontab-tiedostossa, asennus ei onnistu Älä haluat kokeilla samaa muokkausta uudelleen?

Voit tarkastella croniin jo asennettujen komentosarjojen luetteloa käyttämällä crontab -l -komentoa:

Bash-2,05b$ crontab -l 0 */3 * * 2,5 /home/u12345/script.pl

Jos sinun on suoritettava ohjelma kerran päivässä, valitse yöaika. Klo 2–8 palvelimien kuormitus on minimaalinen. Jos ohjelma vaatii paljon resursseja, se suoritetaan nopeammin yöllä kuin päivällä.

Esimerkkejä cronin käytöstä

  • suorita tehtävä kerran tunnissa 0 minuuttia - 0 */1 * * * /home/u12345/script.pl
  • suorita tehtävä kolmen tunnin välein 0 minuuttia - 0 */3 * * * /home/u12345/script.pl
  • suorita tehtävä maanantaisin klo 1:15 - 15 1 * * 1 /home/u12345/script.pl
  • suorita tehtävä 5. huhtikuuta klo 0 tuntia 1 minuutti joka vuosi - 1 0 5 4 * /home/u12345/script.pl
  • suorita tehtävä kuukausittain 1. päivänä klo 6.10 - 10 6 1 * * /home/u12345/script.pl

PHP-skriptin suorittaminen aikataulussa

Suorita skriptit PHP kieli määritettynä ajankohtana halutulla taajuudella PHP-CLI-tulkin avulla. Tältä komentosarjan script.php suorittaminen voi näyttää - /usr/bin/php -q $HOME/script.php> /dev/null. 2>&1

Koska kaikki PHP-ohjelmat eivät voi toimia SAPI CLI:n kautta ilman ennakkomuutoksia, voit ajaa ne wget:n kautta:

/usr/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Määritä polku apuohjelmiin kokonaan juuresta alkaen tiedostojärjestelmä. Jos skripti käyttää vaativat toimintoja, sisältävät, jotka osoittavat suhteelliset polut- käytä suoritettavan skriptin alussa kutsua chdir()-funktiolle, joka asettaa nykyisen työhakemiston. Tai käytä sisäänrakennettua cd-komentoa.

@reboot cd /home/u12345 && ./script.pl

Kuinka saada virheilmoituksia cronin suorittamista ohjelmista

Voit saada virheilmoituksia ohjelmia suoritettaessa, jotta voit tarkkailla säännöllisesti suoritettavien töiden suorituskykyä. Voit tehdä tämän asettamalla seuraavan rivin cron-komentosarjan alkuun:

[email protected], jossa "[email protected]" on sähköpostiosoite, johon ilmoitukset lähetetään. Jos haluat määrittää useita osoitteita, kirjoita ne pilkuilla erotettuina.

Saat sähköpostiviestin siitä, mitä komentosarjat tuottavat aina, kun cron suorittaa tehtävän. Jos kirjoitat skriptin, joka tulostaa rivin "Hello, world" ja suoritat sen cronin läpi, saat sähköpostin, jossa on rivi "Hei, maailma" aina, kun cron suorittaa tällaisen skriptin.

Jos et tarvitse skriptin tulostamaa tekstiä, lisää merkit > /dev/null 2>&1 cron-skriptirivin loppuun

Cronin täydellinen rivi näyttää tältä:

0 1 * * * /usr/bin/php -q $HOME/script.php > /dev/null 2>&1

Tarkista cronin kautta suoritettavaksi asetettujen komentosarjojen oikea syntaksi. Skriptit voivat sisältää virheitä ja toimia eri tavalla, kun ne suoritetaan verkkopalvelimen kautta kuin cronin kautta ja niin edelleen. Ennen kuin suoritat, tarkista komentosarja komennolla unix-kuoressa:

/usr/bin/php -l script.php

Jos skriptissä ei ole virheitä, näet viestin "Skriptissä script.php ei havaittu syntaksivirheitä".

Kuinka suorittaa komentosarja käyttäjänä

Järjestelmän turvallisuuden lisäämiseksi komentosarja suoritetaan tietyn käyttäjän puolesta. Varmista, että käyttäjällä on oikeudet suorittaa komentosarja. Aseta se ennen käsikirjoituksen pääosaa su -l käyttäjätunnus, josta haluat suorittaa skriptin.

Jos haluat esimerkiksi käynnistää TeamSpeak3-palvelimen ts3server-käyttäjänä, käytä seuraavaa komentoa:

Su -l ts3server ./ts3server_startscript.sh aloitus

Skripti sijaitsee käyttäjän kotihakemistossa, jonne siirrymme automaattisesti valtuutuksen aikana.

Rajoitukset

Ohjelmat, jotka käynnistetään cronin kautta, koskevat samat rajoitukset kulutetuille resursseille kuin prosesseille, jotka käyttäjä käynnistää unix-kuoressa. Se on noin ohjelman suoritusajan rajoituksista, numerosta käytettävissä oleva muisti, tiedostokokorajoitukset ja niin edelleen.

, | |

Nykyään Cron on yksi yleisimmistä tavoista automatisoida prosessien käynnistäminen Linuxissa. Cron on demoni, joka juoksee sisään tausta ja sen avulla voit ajoittaa ja automatisoida erilaisten (mukaan lukien palvelintukeen liittyvien) tehtävien käynnistämistä. Tätä tarkoitusta varten sitä käytetään asetustiedosto crontab.

Cronin asentaminen

Päällä Tämä hetki Melkein kaikissa jakeluissa on oletuksena jo asennettu cron-daemon. Jos cron ei ole asennettuna oletusarvoisesti, voit asentaa sen nopeasti seuraavilla komennoilla:

Ubuntu/Debian:

sudo apt-get päivitys
sudo apt-get install cron

Cent OS / Red Hat Linux:

sudo yum päivitys
sudo yum asenna vixie-cron crontabs

Kun asennus on valmis, sinun on varmistettava, että cron on käynnissä taustalla:

sudo /sbin/chkconfig crond päällä
sudo /sbin/service crond start

Perussyntaksi

Harkitse seuraavaa esimerkkiä tehtävästä, joka on ajoitettava suoritettavaksi:

5 * * * * curl http://www.google.com

Eri tehtävien ajoituksen syntaksi voi aluksi tuntua hämmentävältä. Se on itse asiassa hyvin lyhyt ja yksinkertainen, sinun täytyy vain keksiä, miten se luetaan. Jokainen rivi on jaettu kaavioon ja komentoon. Melkein mikä tahansa komento voidaan syöttää riville. Aikataulu on jaettu 5 eri suunnittelukenttään seuraavassa järjestyksessä:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

Esimerkkejä cronin käytöstä

Tämä osio sisältää esimerkkejä yleisimpien tehtävien ajoittamisesta.

Jotta komento suoritetaan automaattisesti minuutin välein:

Jotta komento suoritetaan joka tunnin kahdestoista minuutti (08.12, 09.12 jne.):

Voit suorittaa komennon 15 minuutin välein seuraavasti:

0,15,30,45 * * * *

Jotta komento suoritetaan automaattisesti joka päivä klo 4:00:

Komennon suorittaminen joka tiistai klo 4:00:

Aikataulu voidaan jakaa. Eli 0.15,30,45 sijasta voit käyttää:

Huomaa alue 2-6. Tämä syntaksi suorittaa määritetyn komennon klo 2.00–6.00 15 minuutin välein.

Kuten näet, cronin erittäin tehokas ja joustava syntaksi antaa sinun määrittää melkein minkä tahansa aikavälin.

Cronin asettaminen

Kun olet kehittänyt tehtäväaikataulun, sinun on sijoitettava se oikeaan kohtaan järjestelmässä, jotta demoni voi löytää ja lukea sen. Yleensä järjestelmässä on useita tällaisia ​​pisteitä, mutta pääsääntöisesti tällainen kaavio sijoitetaan käyttäjän crontabiin. Kuten jo mainittiin, crontab on cron-daemonin asetustiedosto, joka sisältää aikataulun tiettyjen komentojen ja ohjelmien suorittamiselle. Tämä tiedosto sijaitsee hakemistossa /var/spool/cron/crontab, mutta sitä ei ole tavallista muokata suoraan. Lisää tiedostoon tarvittavat ohjelmat Käytetään samannimistä komentoa - crontab. Eli voit muokata crontab-tiedostoa kirjoittamalla:

Tämä komento avaa tekstieditorin, jolla voit tehdä kaikki tarvittavat muutokset; joka uusi tehtävä on syötettävä uudelle riville.

Voit tarkastella crontabia tekemättä muutoksia käyttämällä komentoa:

Voit tyhjentää crontabin seuraavalla komennolla:

Kohonnut käyttäjä voi muokata muiden käyttäjien crontabia käyttämällä:

crontab -u<пользователь>-e

cronin lähtö

Kun tehtävä on suoritettu, cron lähettää tulosteen käyttäjän sähköpostiosoitteeseen (ellei tulosta tarvitse lähettää lokiin tai /dev/null). Sähköpostiosoite voidaan määrittää manuaalisesti syöttämällä MAILTO-parametri yläosa crontab. Voit myös määrittää suoritettavan kuoren, polun cron-binaariin ja kotihakemistosi. Tätä varten:

ensimmäinen avattu crontab:

muokkaa sitä sitten näin:

SHELL=/bin/bash
KOTI=/
MAILTO=”example@some_user.com”
#Tämä on kommentti
* * * * * echo 'Suorita tämä komento joka minuutti'

Tämä rivi palauttaa Suorita tämä komento minuutin välein. Cron-daemon lähettää tämän lähdön osoitteeseen example@some_user.com. Tämä ei tietenkään ole kovin kätevää. Kuten aiemmin todettiin, tämä johtopäätös voidaan ohjata lokitiedostoon tällaisten tilanteiden välttämiseksi.

Tätä varten sinun tarvitsee vain lisätä:

* * * * * echo 'Suorita tämä komento joka minuutti' >> file.log

Huomautus: >> symbolit ohjaavat tulosteen lokiin. Lokien lisäksi voit käyttää /dev/null-komentoa myös käyttämällä seuraavaa taustalla toimivaa PHP-skriptiä.

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

Cronin pääsyn rajoittaminen

Jos haluat rajoittaa pääsyä cron-daemonille, sinun on käytettävä /etc/cron.allow- ja /etc/cron.deny-tiedostoja. Jos haluat sallia (sallia) tai estää (estä) pääsyn tietylle käyttäjälle, sinun on yksinkertaisesti syötettävä käyttäjänimi sopivaan tiedostoon. Oletusarvoisesti cron-daemon on kaikkien käyttäjien käytettävissä. Jos haluat estää pääsyn kaikilta käyttäjiltä ja myöntää käyttöoikeuden vain esimerkkikäyttäjälle, sinun on käytettävä seuraavaa komentosarjaa.

Johdanto

Isännöimällä sivustoa haluamme saavuttaa keskeytymätöntä toimintaa ilman meidän osallistumistamme.

Tämä tarkoittaa, että sinun on automatisoitava prosessit, ja tässä cron tulee apuun.

Cron- ohjelma, demoni varten automaattinen käynnistys ohjelmat ja komentosarjat palvelimella haluttuun aikaan.

Crontab Timewebin ohjauspaneelissa

Jos tilisi on maksettu etkä ole jäänyt kiinni roskapostista, Crontab-osio on käytettävissä ja toimiva:

Timewebin ohjauspaneelin Crontab-käyttöliittymä on ystävällinen ja intuitiivinen: jopa aloittelevat käyttäjät, joilla ei ole aikaisempaa kokemusta cronista, voivat helposti selvittää, kuinka tehtäviä luodaan. Kun olet luonut tehtävän, voit tehdä sen automaattinen tila tehdä varmuuskopioita, postituksia, tyhjentää välimuisti ja suorittaa muita vakiotoimintoja.

Timewebin ohjauspaneelin Crontab auttaa kaikkia käyttäjiä automatisoimaan tehtävänsä ja saavuttamaan tarvitsemansa tulokset.

Perustietojen jälkeen puhun vivahteista, jotka on tärkeää ottaa huomioon työskenneltäessä cronin kanssa.

Uudet tehtävät luodaan Crontab-osioon. Tätä varten sinun on täytettävä seuraavat kentät:

  • Nimi. Tämä on tehtävämme nimi.
  • Tiedostotyyppi Ja polku tiedostoon. Valitse tiedostotyyppi ja sen polku sen mukaan, millä kielellä komentosarja on kirjoitettu. Jos tehtävä suorittaa komentosarjan, joka vaatii verkkopalvelimen muuttujia, sen suorittaminen suoraan PHP-tulkin kautta johtaa virheisiin. Siksi, jos käytät komentosarjaa, joka toimii selaimen osoitepalkin kautta käynnistettäessä, sinun on valittava tiedostotyyppi "HTTP-pyyntö" ja määritettävä pyynnön URL-osoite samalla tavalla kuin se on määritetty osoitekenttä"sivustosi/polku/skriptiin/skriptiin.php?parametri1=arvo1¶metri2=arvo2".

Määritä tarvittaessa yksi järjestelmänvalvojan tili Crontab-osiossa. Viestit lähetetään tähän postilaatikkoon, jos konsoliin ilmestyy viesti komentosarjaa suoritettaessa.

Vivahteita

Pienet vivahteet, jotka kannattaa muistaa cronin kanssa työskennellessä.

1. Cron toimii, jos tili on maksettu eikä rajoituksia ole.

Voit tarkistaa tilan luomalla tiedoston php laajennus(esimerkiksi twtest.php) koodilla:

Ja tiedostoon pääsy selaimessa.

Selaimessa näet seuraavat tiedot:

uid=12345(kirjautuminen) gid=600(asiakkaat) ryhmät=600(asiakkaat) - osoittaa, että cron ja mail ovat saatavilla

uid=12345(kirjautuminen) gid=600(asiakkaat) ryhmät=601(uudet asiakkaat),600(asiakkaat),660(roskapostittajat) -kirjoita tukeen

2. Käyttämäsi tiedostolla on oltava luku- ja suoritusoikeudet (r+x).

Oletuksena hosting-tiedostot luodaan oikeuksilla 600. Voit muuttaa tarvittavat oikeudet ssh:n kautta komennolla:

Chmod 744 twtest.php

tai sisään Tiedostonhallinta, Timewebillä on ohjeet tähän:

3. Jotta sähköpostisi ei tukkeutuisi tarpeettomilla kirjeillä,määrittää usein suoritettavat komentosarjat kirjoittamaan lokit tiedostoon, eikä konsoliin.

CRON SSH:n kautta

Aikataulun määrittäminen ssh:n kautta on kuvattu niin monta kertaa, että on mahdotonta kertoa mitään uutta.

Yhteyden muodostaminen ssh:n kautta on kuvattu yksityiskohtaisesti kohdassa ohjekeskus Timeweb:

Lukemisen jälkeen sinun on löydettävä komentosarjan sisältävä tiedosto siirtymällä hakemistojen välillä cd-komennolla. Kun olet löytänyt tiedoston, kirjoita pwd ja kopioi polku (esimerkki "/home/c/cc123456/public_html/test/")

Jos et tiedä, mitä oikeuksia tiedostolla on, kirjoita:

Chmod 744 tiedostonimi

Kun muodostat yhteyden ssh:n kautta, voit muokata tehtäviä komennolla

Crontab -e

Ensimmäistä kertaa palvelin pyytää sinua valitsemaan editorin:

Valitse editori. Jos haluat muuttaa myöhemmin, suorita "select-editor". 1. /bin/ed 2. /bin/nano<---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :

Järjestelmä osoittaa yksinkertaiseen nanoeditoriin numerolla 2. Jos et laskenut voimia tai valinnut vahingossa vi, älä huolestu, paina Esc, kirjoita kaksoispiste q ja paina enter.

Voit vaihtaa editoria kirjoittamalla komennon:

Select-editor

ja valitse nano.

Tehtävät kirjoitetaan rivi riviltä. Esimerkki:

1 2 3 4 5 /opt/php56/bin/php /home/с/сс123456/public_html/twtest.php

Viiden ensimmäisen arvon merkitykset:

  • 1 minuutti - numero väliltä 0-59
  • 2 tuntia - numero 0-23
  • Kuukauden 3. päivä - numero väliltä 1-31
  • Vuoden 4 kuukauden numero - luku väliltä 1-12
  • Viikon 5. päivä - numero 0-7 (0-su, 1-ma, 2-ti, 3-ke, 4-to, 5-pe, 6-la, 7-su)

Jokaiselle parametrille on mahdollista määrittää tarvittava määrä pilkuilla erotettuja arvoja. Jos esimerkiksi kirjoitat "tunnit" -kenttään 8.23, tehtävä suoritetaan klo 8.00 ja klo 23.00. Voit asettaa välin: 9-18 tarkoittaa, että ohjelma alkaa tunnin välein 9-18 tuntia mukaan lukien. Symboli "*" tarkoittaa "kaikki mahdolliset arvot". Esimerkiksi "*":n määrittäminen "tunnit"-kenttään tarkoittaisi "ajoa joka tunti". "/"-symbolia käytetään osoittamaan työn lisätiheyttä. Esimerkiksi "*/3" "minuutit"-kentässä tarkoittaa "joka kolmas minuutti".

"/opt/php*/bin/php" jossa php*/ = php53/ php5.3/ php54/ php5.4/ php56/ php5.6/ php70/ php7.0/ php71/ php7.1/

Viimeinen merkintä osoittaa tiedoston polun ja käynnistettävän tiedoston nimen.

Vivahteita

  1. Kun teet muutoksia ohjauspaneelissa "Crontab"-osiossa, ssh:n kautta tehtyihin merkintöihin tehdyt muutokset poistetaan!
  2. Jos sekä "kuukauden päivä"- että "viikonpäivä" -kentät on määritetty, tällainen työ suoritetaan jokaisena määritellynä viikonpäivänä kuukauden päivästä riippumatta. Esimerkiksi seuraava komento suoritetaan kello 9:19 joka keskiviikko ja joka kuun 7. päivä, vaikka 7. päivä ei olisikaan keskiviikko.

19 9 7 * 3 /opt/php56/bin/phpn /home/s/ss123456/public_html/twtest.php

Erikoistapaukset

Jos haluat suorittaa tehtävän useammin kuin kerran minuutissa, käytä unta.

Voit tehdä tämän kirjoittamalla crontabiin:

* * * * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

suorittaaksesi tiedoston 30 sekunnin välein.

Joskus cron-ajastinta käytettäessä et tiedä, kuinka kauan komentosarjan suorittaminen kestää. Jotta komentosarjaa ei suoriteta kahdesti, on tarkistettava, että edellinen skripti on suoritettu loppuun.

Looginen vaihtoehto olisi luoda lukitustiedosto ja tarkistaa tiedoston olemassaolo komentosarjaa suoritettaessa. Mutta Timeweb-hostingilla, kuten muilla isännöintisivustoilla, on prosessorirajoitus. Skripti riippuu olosuhteista ja suoritusajasta, mikä tarkoittaa, että emme voi ennustaa komentosarjan suoritusaikaa. Jos komentosarja suoritetaan sääntöjen ja rajoitusten vastaisesti ( ), prosessi päättyy isännöintipuolelle. Tällöin lukkotiedostoa ei poisteta, mikä tarkoittaa, että cron ei suorita komentosarjaa ennen kuin tiedosto on poistettu.

Insinööriosaston maestro selitti, kuinka ongelma ratkaistaan.

Luo ensin sh-skripti tiedostoon /home/c/cc123456/tmp/twtest.sh:

#!/bin/bash-komento=$@ no_spaces=`echo $command | sed -e "s/\s/_/g" -e "s|/|_|g"` pidfile=/var/tmp/$no_spaces.pid lockfile=/var/tmp/$no_spaces.lock jos [[ -e $pidfile ]] sitten pid=`kissa $pidfile 2>/dev/null` ps h $pid >/dev/null 2>/dev/null jos [[ $? -eq 0 ]] sitten poistu 1 else rm $lockfile fi fi echo $$ > $pidfile /usr/bin/flock -w 0 $lukitustiedosto $komento rm $pidfile

Valitse ohjauspaneelin crontab-osiosta "Suoritettava binaaritiedosto" -tyyppi.

"Täysi polku" -kenttään kirjoitamme:

/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php

Missä

  • /home/c/cc123456/tmp/twtest.sh - testiskriptimme
  • /opt/php56/bin/php - polku haluttuun tulkkiin
  • /home/c/cc123456/tmp/twtest.php - komentosarjamme polku

Ilmoitamme tarvittavan käynnistysajan ja keksimme nimen.

Johtopäätös

Nyt tiedät kuinka työskennellä cronin kanssa ja suorittaa tehtäviä automaattisesti. Lisää yksityiskohtainen tieto cronista, katso "man cron". Onnea!