HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

Cron

Kohteesta Wikikko - kansan taitopankki
Siirry navigaatioon Siirry hakuun

Yleistä[muokkaa]

Cron, launchd jne. ovat tietokoneen taustalla pyöriviä ohjelmia, joita voi ajastaa suorittamaan myös käyttäjän omia tarpeita. Esimerkkejä voisi olla varmuuskopiointi, oman python-ohjelman suorittaminen, Applescript:llä ja Automator:lla tehtyjän ohjelmien suorittaminen.

Cron[muokkaa]

Drupal 6[muokkaa]

  • cPanel:n kautta on mahdollista asetta Cron Jobs. On ehkä hyvä käyttää siellä olevaa wizardia, jotta aikataulutus tulee oikein. Cron koostuu kahdesta osasta aikataulusta ja komennosta. Jos jompi kumpi ei ole kohdallaan ei kokonaisuus välttämättä toimi.
    • > /dev/null ohjaa postin bittiavaruuteen. Jättämällä tämän pois, cPanel lähettää sähköpostin annettuun osoitteeseen.
0 0 * * * cd /home/käyttäjänimitms/public_html/drupal; php /home/käyttäjänimitms/public_html/drupal/cron.php > /dev/null
0 0 * * * /usr/bin/wget -O - -q -t 1 http://www.domain.fi/cron.php
0 0 * * * /usr/bin/php -q /public_html/drupal/cron.php
0 0 * * * /usr/bin/php /home/käyttäjänimitms/public_html/drupal/cron.php
0 0 * * * kerran päivässä
*/5 * * * * viiden minuutin välein
Ohjeita Drupalin kotisivuillaor Drupal Cron Module

Drupal 7[muokkaa]

Siteground: php /home/käyttäjätunnustähän/public_html/polkutähän/cron.php > /dev/null

Magento 2.x[muokkaa]

Magento 1.8[muokkaa]

1.8.0 Magentossa ylläpidossa ja tietokantaan voi tehdä vaikka kuinka paljon ajastusmuutoksia, mutta ne eivät toimi ennenkuin ne käynnistetään juurihakemistossa sijaitsevalla cron.sh tai cron.php -ohjelmalla. Tämä tapahtuu asettamalla palvelimen crontabiin jomman kumman ohjelman käynnistävä skripti. Sen voi lisätä pääteohjelmalla tai cPanelilla. Käytä arvoa viiden (5) minuutin välein.

  • Tämän lisäksi Magenton ylläpidossa kohdassa Järjestelmä > Asetukset > Erityisasetukset > Järjestelmä > Ajastetut tehtävät säädetään ajastettuja toimintoja. Aseta kohtaan Suorita ajastetut tehtävät joka arvoksi vähintään 15 minuuttia. Onnistuneiden ja epäonnistuneiden tehtävienhistorian säilytysaika 1440 säilyttää viimeiset 24 tuntia. Luvut ovat minuutteina. Historia näkyy tietokannassa taulussa cron_schedule
  • Voit asettaa cPanelissa seurannan cron ajoista tulemaa sähköpostiin jotta voit varmistua että ajot onnistuvat.
  • Laajennuksella AOE Scheduler voit hallita ajastuksia suoraan ylläpidosta.
  • Jos saat sähköpostiin ilmoituksia kuten /home/käyttäjätunnus/public_html/polku/cron.sh: line 20: expr: command not found ja

/home/käyttäjätunnus/public_html/polku/cron.sh: line 21: ps: command not found ei niistä todennäköisesti tarvitse välittää SiteGround ei käytä ps ja expr binääreitä ympäristössään (tukigurun antama vastaus asiakaspalvelusta).

Pääteohjelmalla[muokkaa]

  • Päätteessä komento: crontab -e
  • Lisää jompi kumpi seuraavista riveistä sen mukaan mikä on koko osoitepolkutiedostoon.
wget -O /dev/null -q http://www.osoite.fi/polku/cron.php > /dev/null
  • Tallenna

cPanel[muokkaa]

  • cPanel:n kautta on mahdollista asetta Cron Jobs. Voit valita alasvetovalikosta suoraan 5 minuutin välein tai syöttää arvot kuten seuraavassa. Jos cron.sh ei toimi, kokeile cron.php. Cron.php kanssa suositellaan käytettäväksi wget komentoa.
    • Minute: */5
    • Hour: *
    • Day: *
    • Month: *
    • Weekday: *
    • Command: wget -O /dev/null -q http://www.osoite.fi/polku/cron.php > /dev/null
    • Command: /bin/sh /home/domainnimitähän/public_html/polkucronshhakemistoon/cron.sh
    • Add New Cron Job
http://support.xtento.com/wiki/Setting_up_the_Magento_cronjob

Tarkastelu tietokannassa[muokkaa]

  • cron_schedule -taulussa näkyy milloin ajoja on suoritettu. Viimeisin ajo on taulun lopussa. Huomaa että kellonaika saattaa olla 3 tuntia jäljessä.
  • sql komennolla SELECT * FROM core_config_data WHERE path LIKE 'sitemap/%'; saat näkymään kaikki asetukset, jotka olet asettanut ylläpidossa sivukarttaan.

Lokitiedosto[muokkaa]

Seuraava skripti lisättynä cron.php -tiedoston loppuun tekee juurihakemistoon tiedoston nimeltä cron.php.log, johon tallentuu viimeisin cronajon päivämäärä. Lukema tallentuu jostain syystä aina kahdesti? Huomaa että kellonaika saattaa olla 3 tuntia jäljessä.

try {
Mage::getConfig()->init()->loadEventObservers('crontab');
Mage::app()->addEventArea('crontab');
Mage::dispatchEvent('default');

$log = fopen(__FILE__.'.log', 'a');
fwrite($log, date("Y-m-d H:i:s").PHP_EOL);
fclose($log);
} catch (Exception $e) {
Mage::printException($e);
}

Sähköposti cron-ajosta[muokkaa]

//Sähköposti-ilmoituksen lähettäminen kun cron.php tiedosto suoritetaan

$to = "sähköpostiosoitetähän";
$subject = "Magento - Cron-ajo -ilmoitus";
$message = "Cron on ajettu ". date('l jS \of F Y h:i:s A');
$from = "lähettäjänsähköpostiosoitetähän";
$headers = "From: $from";
mail($to,$subject,$message,$headers);

Mediawiki[muokkaa]

nice -n 19 alentaa varmuuskopiointiprosessin tärkeyttä.

nice -n 19 mysqldump -u tietokantakäyttäjätunnus --password=tietokantasalasana --default-character-set=käytettävämerkistö tietokannannimi -c | nice -n 19 gzip -9 > ~/varmuuskopiot/wiki-tietokannannimi-$(date '+%Y%m%d').sql.gz
  • cPanel hallintapaneelissa voi myös asettaa cron:n
/usr/bin/mysqldump -u tietokantakäyttäjätunnus --password=tietokantasalasana --default-character-set=käytettävämerkistö tietokannannimi -c | /bin/gzip > ~/backup/wiki-tietokannannimi-$(date '+\%Y\%m\%d').sql.gz
http://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki

OS X (Yosemite, Mavericks)[muokkaa]

Launchd[muokkaa]

Applen oma töiden ajastusohjelma

  • Käytetään komennolla launchctl
  • LaunchAgents ajetaan käyttäjäkohtaisesti ja LaunchDaemons ajetaan root:na tai User-avaimella määritettynä käyttäjänä.
  • .plist-tiedosto (propertylist) ladataan launchd -ohjelmaan komennolla load. Jos ladataan LaunchDaemons, se on ladattava sudo-komennolla. Vasta tämän jälkeen se on toiminnassa. Eli pelkästään .plist -tiedoston sijoittaminen hakemistoon ei ota sitä toimintaan.
  • Ajastukset ovat kukin omana .plist -tiedostona jossain seuraavista hakemistoista:
    • Sisäänkirjautuneen käyttäjän ajastettavat ohjelmat (User Agents): Macintosh HD/Users/käyttäjänimi/Library/LaunchAgents
    • Kaikkien käyttäjien ajastettavat ohjelmat (Global Agents): Macintosh HD/Library/LaunchAgents
    • Järjestelmän ajastettavat ohjelmat (System Agents): Macintosh HD/System/Library/LaunchAgents
    • Root-käyttäjän tai User-avaimella määritellyn kaikkien käyttäjien ajastettavat ohjelmat (Global Daemons): Macintosh HD/Library/LaunchDaemons
    • Root-käyttäjän tai User-avaimella määritellyn järjestelmän ajastettavat ohjelmat (System Daemons): Macintosh HD/System/Library/LaunchDaemons
    • /System/Library -hakemistoon ei tulisi koskaan sisällyttää omaa .plist-tiedostoa.
    • /Library -hakemistossa olevat koskevat kaikkia käyttäjiä
    • ~/Library eli Macintosh HD/Users/käyttäjänimi/Library -hakemistossa olevat koskevat tiettyä käyttäjää
    • [Lähde: http://launchd.info A launchd Tutorial]
  • Launchd lataa kaikki hakemistossa olevat tiedostot riippuen siitä missä hakemistossa ne sijaitsevat, esim. kirjautuessasi käyttäjätilillesi. Tämän jälkeen se tarkistaa milloin työt suoritetaan. Tietokoneen nukkuessa lauchd ei lähtökohtaisesti suorita tehtäviä.
  • Varmista että .plist tiedostolla on suoritusoikeus ja ne ovat myös muiden kirjoitettavissa. Jos ne sijaitsvat käyttäjäkirjastohakemiston sijaan /Library/LaunchAgents kansiossa niiden täytyy olla pääkäyttäjän (root) omistuksessa.
    • Esimerkiksi sudo chown root:wheel /System/Library/LaunchAgents/tiedostonimi.plist
    • Esimerkiksi sudo chown käyttäjänimesi:staff /Users/käyttäjänimesi/Library/LaunchAgents/tiedostonimi.plist
  • Jokainen työ nimetään omalla nimellään. Tämä nimi on sama sekä tiedoston nimenä että Label -kohdassa plist-tiedostossa, kuten esimerkiksi com.apple.FolderActions.enabled Label kohdan nimi on tärkeämpi, sen mukaan launchd toimii. Huomaa että käytössä on päinvastainen järjestys eli luetaan oikealta vasemmalle. Nimen voi antaa täysin vapaasti.
  • OS X:ssä on valmiina päätteen kautta käytettävä launchctl ohjelma. Launchctl ohje. Graafisella käyttöliittymällä on esimerkiksi Lingon sovellus. Myös Xcode reagoi selkeämmin näihin tiedostoihin. Yksinkertaista on myös käyttää vi -editoria Pääte-ohjelmalla (tarvittaessa sudo vi)
  • Voit muuttaa varsinaista ajettavaa ohjelmaa (ei siis .plist-tiedosto) ja tallentaa sen, jolloin se ajataan seuraavan kerran kun se tulee ajettavaksi uusilla muutoksilla. Plist unload-load ei ole tarpeellinen tällaisessa muutoksessa.
  • Jos muutat .plist -tiedostoa, sinun on tehtävä unload ja sitten load.
  • load-komennon jälkeen ohjelma ajetaan heti. Jos ohjelma muodostaa tiedostoja, ohjelman toiminnan näkee esim. tiedoston muokattu-kohdasta.
  • Kun .plist sisältää jonkin Pääte-ohjelman komennon, se on jaettava <string> </string> -tagien väliin niin, että jokainen komennon osa, joka erotetaan välilyönnillä on omien tagien sisällä. Esimerkiksi seuraavassa komento on lp, määreet -oraw ja tiedosto /usr/share/foo2zjs/firmware/sihp1000.dl
        <string>lp</string>
	<string>-oraw</string>
	<string>/usr/share/foo2zjs/firmware/sihp1000.dl</string>
  • Jos ls -l komento on lisännyt tiedosto-oikeuksien perään @ -merkin, anna komento kyseiseen tiedostoon osoittaen sudo xattr -c tiedostonimi.plist
Näyttää launchd:n kaikki lataamat, käytössä olevat työt ja tietoa niistä
launchctl list
Näyttää launchd:stä vain kyseisen työn ja tiedot siitä
launchctl list | grep tiedostonimi
Näyttää ladatun tiedoston sisällön, ilman .plist päätettä
launchctl list tiedostonimi
Lataa työn lauchd käyttöön. Kun Daemon, käytetään sudo-komennolla
launchctl load -w ~/Library/LaunchAgents/tiedostonimi.plist
sudo launchctl load -w ~/Library/LaunchAgents/tiedostonimi.plist
Poistaa työn lauchd käytöstä.
launchctl unload -w ~/Library/LaunchAgents/tiedostonimi.plist
Suorittaa työn heti. HUOM! käytetään labelia
launchctl start oma.ajastettu.tehtava
Lopettaa meneillään olevan työn heti. HUOM! käytetään labelia
launchctl stop oma.ajastettu.tehtava
Ajastetaan launchd suorittamaan php-ohjelma 3 tunnin välein. Tallenna seuraava nimellä oma.ajastettu.tehtava.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>oma.ajastettu.tehtava</string>
	<key>ProgramArguments</key>
	<array>
        <string>/bin/sh</string>
        <string>-c</string>
	<string>/usr/bin/php /Users/käyttäjänimi/polku/hakemistoon/suoritettavatiedostonimi.php</string>
	</array>
	<key>OnDemand</key>
	<false/>
	<key>ThrottleInterval</key>
	<integer>10800</integer>
</dict>
</plist>

Ratkaisuja ongelmiin[muokkaa]

  • Path had bad ownership/permission –virheilmoitus
    • Älä käytä kometoa ajaessasi sudo, koska et siiloin aja komentoa käyttäjänä, jona olet kirjautunut päätteeseen vaan roottina.
  • Ohjelman ajoa kannattaa kokeilla myös suoraan pääteohjelmalla että varmaasti toimii tai selaimen kautta. Esm. php /osoite/tiedostonimi.php
  • Jos saat pääteohjelmassa virheilmoitus englanniksi jotain ei.. se tarkoittaa todennäköisesti että plist-tiedostossa on virhe.
  • list komennolla toinen arvo, Status on toimivassa skriptissä ilmeisesti 0, se voi olla myös jokin muu.
  • Ohjelma, esim. php_llä kirjoitettu, joka toimii pääteohjelmassa tai selaimen kautta ajettuna ei välttämättä toimi launchd kautta ajettuna. Ongelma on yleensä tiedostopolku. Peruspolku, joka todennäköisesti toimii alkaa /Users/käyttäjänimi/polkuhakemistoon/tiedostonimi.php
exec("/Users/käyttäjänimi/polku/hakemistoon/tiedostonimi.txt" );
  • Tarkemmat ohjeet löytyvät tästä.
  • Launchd debuggerin saa päälle komennolla sudo launchctl log level debug ja pois sudo launchctl log level error ja tiedosto löytyy tail -f /var/log/system.log tai seuraten konsoli-sovelluksella system.log tiedostoa.
  • Shell (.sh) skriptin tiedostooikeudet pitää olla +x
  • StartInterval suorittaa tehtävän 10 sekunnin välein. ThrottleInterval avulla voit määritellä pitemmän ajan.


  • Jos et ole selvillä tiedostopolusta, voit tehdä seuraavan testin:
  • Aja ohjelma pääteohjelmassa php /Users/käyttäjänimi/polku/hakemistoon/suoritettavatiedostonimi.php ja ota talteen tuloste
    • vaihda ohjelmakoodisi seuraavaan:
<?php
  system('/usr/bin/env');
?>
    • muokkaa .plist tiedostossa:
 <string>/usr/bin/php /Users/käyttäjänimi/polku/hakemistoon/suoritettavatiedostonimi.php  > /tmp/tuloste.txt</string> 
    • Anna komento cat /tmp/tuloste.txt ja vertaa tulostetta toiseen tulosteeseen. Ero on todennäköisesti kohdassa PWD. Jos se on PWD=/ kokeile polkua /Users/käyttäjänimi/polkuhakemistoon/tiedostonimi.php ohjelmakoodissasi. Vaihtoehdot tiedostonimi.php tai /tiedostonimi eivät siis toimi.
http://apple.stackexchange.com/questions/111943/what-is-the-difference-among-the-various-event-schedulers-for-os-x-darwin

Cron[muokkaa]

Ei suositella käytettäväksi OSX:ssä.

crontab -l
crontab -e
/usr/lib/cron/tabs/ and /etc/crontab
http://mactips.dwhoard.com/mactips/system/schedule-automatic-tasks
http://www.maclife.com/article/columns/terminal_101_creating_cron_jobs