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

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

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

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


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


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.


tampaknya tidak berfungsi, saya baru saja menambahkan PATH = xxx ke /etc/init.d/cron tetapi * * * * * echo $ output PATH adalah sama
grosser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.