GNU/Linux >> Znalost Linux >  >> Linux

Úloha Cron zkontrolovat, zda skript PHP běží, pokud ne, pak spustit?

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.

Související:Linux – Poběží spustitelný soubor Linuxu zkompilovaný na jedné „příchuti“ Linuxu na jiné?

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


Linux
  1. Spusťte úlohu cron, pouze pokud ještě není spuštěna

  2. Jak nastavit úlohu cron, aby každou hodinu spouštěla ​​spustitelný soubor?

  3. Paralelní spuštění skriptu shellu

  1. CronJob neběží

  2. Jak nastavit úlohu CRON, aby se spouštěla ​​každých 10 sekund v Linuxu?

  3. cron občas neběží

  1. Spuštění Cron každé 2 hodiny

  2. jak spustit cron job každé 3 měsíce?

  3. Jak spustit úlohu cronu každý den v určitou hodinu?