Bagaimana cara mengatur cron PATH secara global (yaitu untuk semua pengguna) secara permanen?

10

Kita perlu memiliki / usr / local / bin di jalur cron untuk semua pengguna. Apakah ada cara untuk mengaturnya di seluruh sistem, tanpa perlu mengedit crontab setiap pengguna individu?

Kami telah mencoba menambahkan PATH ke / etc / crontab:

# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Tetapi ketika pengguna memiliki ini di crontab mereka:

$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path

... itu mengungkapkan bahwa jalur mereka masih disetel ke default:

$ cat /tmp/current_cron_path
/usr/bin:/bin
lebih kotor
sumber
2
Petunjuk umum: Menulis "tidak berhasil" biasanya tidak akan memberi Anda balasan yang bermanfaat. Selalu jelaskan bagaimana tepatnya itu tidak berhasil, yaitu, persis apa yang Anda lakukan, dan apa sebenarnya hasilnya.
sleske
Harap dicatat bahwa mengandalkan echocron Anda mungkin tidak dapat diandalkan .
Der Hochstapler

Jawaban:

4

Anda dapat mengkonfigurasi PATH Anda dalam file konfigurasi crontab seperti yang ditunjukkan pada kode pertama kecuali di sana . Pertama tentukan variabel env, kemudian tentukan pekerjaan.

UPD: Karena tautannya rusak, berikut ini kutipannya:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
igorp1024
sumber
1
tidak bekerja di ubuntu, bahkan setelah restart cron
grosser
1
@rosser: Yah, seharusnya begitu. Silakan kirim crontab lengkap Anda (edit jawaban Anda), bersama dengan output yang dihasilkannya dan mengapa Anda yakin itu tidak berfungsi. Lalu kita akan melihat ...
sleske
Juga perhatikan bahwa format VARIABEL = baris nilai agak lebih terbatas daripada dalam skrip shell: Setiap tugas harus pada barisnya sendiri, dan Anda tidak boleh menggunakan variabel di sisi kanan (mis. PATH = $ PATH: / bla tidak akan bekerja).
sleske
saya memperbarui pertanyaan, mengatur PATH dalam crontab individu berhasil, hanya perubahan global tidak berhasil
grosser
Coba tentukan variabel PATH di setiap crontab di mana Anda membutuhkannya. Mungkin ini dilakukan karena masalah keamanan. BTW, di ubuntu (saya sudah memeriksa) PATH didefinisikan di / etc / crontab dan /etc/cron.d/anacron di ubuntu. Jadi sepertinya itu tidak diwarisi dari / etc / crontab. Coba definisikan di root's crontab ( sudo crontab -e)
igorp1024
3

Mengatur variabel PATH harus bekerja di Ubuntu, bagaimana Anda mengatakan itu tidak berfungsi?

Lihat # 14: Linux Crontab: 15 Contoh Pekerjaan Cron Luar Biasa

thegeek
sumber
saya memperbarui pertanyaan, mengatur PATH dalam crontab individu berhasil, hanya perubahan global tidak berhasil
grosser
1

Saya tidak dapat menemukan solusi untuk ini juga. Yang paling dekat saya dengan solusi yang layak adalah sebagai berikut (diambil dari https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Ubah shell untuk pekerjaan cron Anda dan arahkan ke skrip bash. Yaitu, di bagian atas cronjob, tambahkan: SHELL=/path/to/setup/cron.bash
  • Dalam skrip shell ini, muat variabel lingkungan dan tentukan vars lainnya. Pastikan untuk memasukkan 4 baris berikut di atas. Ini me-reset variabel SHELL ke bash, dan mengeksekusi bash shell untuk menjalankan cronjobs.

Sebagai contoh:

#!/bin/bash
set -e

source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash

# execute the cron command in an actual shell
exec /bin/bash --norc "$@"

Kelemahan: ini mengharuskan Anda untuk menentukan SHELL=...di bagian atas setiap cronjob. Terbalik: Anda akan menggunakan variabel lingkungan biasa, dan Anda tidak perlu khawatir tentang menjaga variabel konsisten antara cron dan lainnya

Laurens Rietveld
sumber
0

Jika Anda dapat menjadi root, dapatkah Anda mencoba mengedit /etc/init.d/crondan mengubah PATH di sana? Saya belum menguji ini, tetapi akan menarik untuk diperiksa.

Homolka yang kaya
sumber
tampaknya tidak berfungsi, saya baru saja menambahkan PATH = xxx ke /etc/init.d/cron tetapi * * * * * echo $ output PATH adalah sama
grosser