GNU/Linux >> Znalost Linux >  >> Linux

Jak přimět CRON, aby volal na správné PATH

S největší pravděpodobností cron běží ve velmi řídkém prostředí. Zkontrolujte proměnné prostředí, které cron používá, přidáním fiktivní úlohy, která vypíše env do souboru, jako je tento:

* * * * * env > env_dump.txt

Porovnejte to s výstupem env v normální relaci shellu.

K místnímu crontab můžete přidat své vlastní proměnné prostředí tak, že je definujete v horní části crontab.

Zde je rychlá oprava pro přidání $PATH na aktuální crontab:

# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron

Výsledný crontab bude vypadat podobně jako odpověď chrissygormley, s PATH definovanou před pravidly crontab.


Do crontab byste měli uvést úplné cesty . To je nejbezpečnější možnost.
Pokud to nechcete dělat, můžete kolem svých programů umístit obalový skript a nastavit tam PATH.

např.

01 01 * * * command

se stává:

01 01 * * * /full/path/to/command

Také cokoli volaného z cron by měl být velmi opatrný na programy, které spouští, a pravděpodobně nastavit vlastní volbu pro PATH proměnná.

EDIT:

Pokud nevíte, kde je příkaz, který chcete spustit which <command> z vaší skořápky a řekne vám cestu.

EDIT2:

Takže jakmile váš program běží, první věc, kterou by měl udělat, je nastavit PATH a jakékoli další požadované proměnné (např. LD_LIBRARY_PATH ) na hodnoty, které jsou nutné pro spuštění skriptu.
V podstatě místo přemýšlení o tom, jak upravit prostředí cronu, aby bylo vhodnější pro váš program/skript – udělejte ze svého skriptu prostředí, které mu je dáno, nastavením vhodného při spuštění.


Použil jsem /etc/crontab . Použil jsem vi a zadal do tohoto souboru cesty, které jsem potřeboval, a spustil jej jako root. Normální crontab přepíše PATH, které jste nastavili. Dobrý návod, jak to udělat.

Soubor cronu pro celý systém vypadá takto:

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

Linux
  1. Jak získat klíč USB k automatickému připojení?

  2. Jak fungují vnitřnosti démona Cron?

  3. Crontab Log:Jak protokolovat výstup mého skriptu Cron

  1. Jak spustit úlohu cronu v určité dny v týdnu

  2. Jak získat velikost tar.gz v (MB) souboru v pythonu

  3. Jak získám uživatelské jméno v souboru Makefile?

  1. Jak používat cron na Linuxu

  2. Kde je protokol cron / crontab? / Jak povolit protokol Cron?

  3. Jak získat stav ukončení smyčky v bash