Zajímalo by mě, jestli mě někdo nenasměruje správným směrem. Mám málo zkušeností s prací s příkazovým řádkem Linuxu a v poslední době jsem kvůli různým faktorům v práci musel získat znalosti.
V podstatě mám dva php
skripty, které jsou umístěny v adresáři na mém serveru. Pro účely aplikace musí tyto skripty běžet nepřetržitě. V současné době to implementuji takto:
nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &
a
nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &
Všiml jsem si však, že i přes nekonečnou smyčku se skripty pravidelně zastavují a jsem nucen je restartovat. Nejsem si jistý proč, ale oni ano. To mě přimělo podívat se na vyhlídku na CRON
úloha, která zkontroluje, zda běží, a pokud ne, spustí je/restartuje.
Mohl by mi někdo poskytnout nějaké informace, jak v tom postupovat?
Přijatá odpověď:
Rád bych rozšířil Davidannovu odpověď, protože jste nováčkem v konceptu práce cron. Každý systém UNIX nebo Linux má někde uložený crontab. Crontab je prostý textový soubor. Zvažte následující:(Z Gentoo Wiki na Cron)
#Mins Hours Days Months Day of the week
10 3 1 1 * /bin/echo "I don't really like cron"
30 16 * 1,2 * /bin/echo "I like cron a little"
* * * 1-12/2 * /bin/echo "I really like cron"
Tento crontab by měl každou minutu každou
hodinu každého dne každý druhý měsíc opakovat „Opravdu mám rád cron“. Očividně byste to udělali
pouze v případě, že byste měli cron opravdu rádi. Crontab bude také každý den v lednu a únoru v 16:30 ozvat „Cron mám rád
málo“. Také se ozve
„Nemám moc rád cron“ ve 3:10 1. ledna.
Protože jste v cronu noví, pravděpodobně budete chtít komentovat sloupce označené hvězdičkou, abyste věděli, k čemu se jednotlivé sloupce používají. Každá implementace Cronu, kterou znám, byla vždy v tomto pořadí. Nyní slučuji Davidannovu odpověď s mým komentovaným souborem:
#Mins Hours Days Months Day of week
* * * * * lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock
* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/the.lock
Pokud do každého sloupce neuvedete žádnou hodnotu, výchozí hodnota je:
každou minutu každou hodinu každý den každého měsíce po celý týden, –> každou minutu po celý rok.
Jak uvádí Davidann, použití lockfile zajišťuje, že běží pouze jedna kopie php interpretu, php parse_tweets.php
je příkaz ke „spuštění“ souboru a poslední část řádku odstraní soubor zámku, aby se připravil na další spuštění. Nemám rád mazání souboru každou minutu, ale pokud je to chování, které potřebujete, je to velmi přijatelné. Zápis a přepis na disk je pouze osobní preference