GNU/Linux >> Belajar Linux >  >> Linux

Cara membuat CRON memanggil PATH yang benar

Kemungkinan besar, cron berjalan di lingkungan yang sangat jarang. Periksa variabel lingkungan yang digunakan cron dengan menambahkan pekerjaan dummy yang membuang env ke file seperti ini:

* * * * * env > env_dump.txt

Bandingkan dengan output dari env dalam sesi shell normal.

Anda dapat menambahkan variabel lingkungan Anda sendiri ke crontab lokal dengan mendefinisikannya di bagian atas crontab Anda.

Inilah perbaikan cepat untuk menambahkan $PATH ke crontab saat ini:

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

Crontab yang dihasilkan akan terlihat mirip dengan jawaban chrissygormley, dengan PATH ditentukan sebelum aturan crontab.


Anda harus meletakkan jalur lengkap di crontab Anda . Itu pilihan yang paling aman.
Jika Anda tidak ingin melakukannya, Anda dapat meletakkan skrip pembungkus di sekitar program Anda, dan menyetel PATH di sana.

mis.

01 01 * * * command

menjadi:

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

Juga apa pun yang dipanggil dari cron harus sangat berhati-hati dengan program yang dijalankannya, dan mungkin menetapkan pilihannya sendiri untuk PATH variabel.

EDIT:

Jika Anda tidak tahu di mana perintahnya, Anda ingin menjalankan which <command> dari shell Anda dan itu akan memberi tahu Anda jalannya.

EDIT2:

Jadi setelah program Anda berjalan, hal pertama yang harus dilakukan adalah menyetel PATH dan variabel lain yang diperlukan (mis. LD_LIBRARY_PATH ) ke nilai yang diperlukan untuk menjalankan skrip.
Pada dasarnya, alih-alih memikirkan cara memodifikasi lingkungan cron agar lebih cocok untuk program/skrip Anda - buat skrip Anda menangani lingkungan yang diberikannya, dengan menyetel lingkungan yang sesuai saat dimulai.


Saya menggunakan /etc/crontab . Saya menggunakan vi dan memasukkan PATH yang saya butuhkan ke dalam file ini dan menjalankannya sebagai root. Crontab normal menimpa PATH yang telah Anda atur. Tutorial yang bagus tentang cara melakukannya.

File cron seluruh sistem terlihat seperti ini:

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. Bagaimana Cara Mendapatkan Kunci Usb Untuk Pemasangan Otomatis?

  2. Bagaimana Cara Kerja Bagian Dalam Cron Daemon?

  3. Cara Menjadwalkan Pekerjaan Cron dengan Crontab

  1. Crontab Log:Cara Mencatat Keluaran Skrip Cron Saya

  2. Cara menjalankan pekerjaan cron pada hari-hari tertentu dalam seminggu

  3. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  1. Bagaimana cara mendapatkan nama pengguna di Makefile?

  2. Cara mendapatkan status keluar satu lingkaran di bash

  3. Bagaimana cara mendapatkan PYTHONPATH di shell?