"Command not found" saat menjalankan skrip melalui cron

29

Saya ingin menjalankan skrip saya di crontab, tetapi saya memiliki beberapa masalah ...

Dalam skrip saya, saya menjalankan perintah ini:

db2 connect to myDB2

Ini berfungsi dengan baik ketika saya menjalankan ini sebagai pengguna db2inst1 , tetapi ketika saya menjalankan skrip ini di db2inst1 crontab , saya mendapatkan ini:

db2: perintah tidak ditemukan.

Bagaimana saya bisa memecahkan masalah ini?

Wolfy
sumber

Jawaban:

43

Untuk menghindari keharusan mengetikkan path absolut ke suatu perintah, shell memperkenalkan $PATHvariabel lingkungan, setiap direktori dipisahkan oleh a :dan pencarian dilakukan dari kiri ke kanan. cronsering membersihkan seluruh lingkungan, termasuk $PATHvariabel ini . Oleh karena itu, skrip mungkin berperilaku berbeda di cron Anda dibandingkan dengan perilaku di shell.

Gunakan jalur absolut

Jalankan which db2sebagai db2inst1pengguna untuk mendapatkan path lengkap untuk db2program. Jika outputnya /usr/bin/db2, perintah cron Anda akan terlihat seperti:

/usr/bin/db2 connect to myDB2

Setel variabel PATH

Jalankan echo "$PATH"sebagai db2inst1pengguna untuk mendapatkan $PATHvariabel dan pastikan variabel ini juga tersedia di skrip cron Anda. Misalnya, jika outputnya adalah /usr/local/bin:/usr/bin:/bin, Anda akan meletakkan baris berikutnya di bagian atas skrip shell Anda:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
sumber
8

Seperti yang dijawab dalam /ubuntu//a/23438/227839 , Anda harus mengatur PATHskrip shell Anda:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

atau dalam file crontab, yang akan berlaku untuk semua pekerjaan cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Dam Linh
sumber
Terima kasih, ini sangat membantu!
Yamashiro Rion
3

Anda harus mendefinisikan apa itu db2 dan myDB2 , jika tidak gunakan lokasi absolut dari ' file ' atau ' aplikasi ' yang ingin dijalankan.

Contoh:

/bin/rm /home/ubuntu/a.txt
Mahmudin Ashar
sumber