Saya punya banyak CronJobs, dan mereka berfungsi dengan baik, kecuali satu. Saya telah melihat melalui banyak forum dan situs web, dan mencoba kombinasi beberapa hal, tetapi sayangnya tidak ada yang berhasil.
Mengulangi pertanyaannya adalah:
T: Bashscript berfungsi tanpa masalah dari terminal. Tetapi dengan CronJob itu tidak berfungsi sama sekali.
Hal terakhir yang saya lakukan untuk debugging adalah sebagai berikut:
1) Memeriksa apakah Cron Daemon sedang berjalan (ps ax | grep
) =bekerja
2) Membuat tugas chron ekstra untuk (menguji ulang) mengirimkan email kepada saya setiap menit (* * * * * echo "hello" | mail -s "subject" [email protected]
) =bekerja dengan baik
3) Saya telah menjalankan skrip bash saya melalui terminal sebagai standalone =bekerja dengan baik
4) Saya telah memeriksa grep CRON /var/log/syslog
untuk setiap kesalahan =terlihat bagus/tidak ada kesalahan
5) Memeriksa izin dll. =tidak ada masalah dengan izin
6) Jalur file ke skrip bash untuk tugas cron terlihat baik
#!/bin/bash
#When adding any additional machines make sure there are two files
#within the directory. MACHINE_NAMEMACHINE_NUMBER_initial_time.txt
#and MACHINE_NAMEMACHINE_NUMBER_old_ignition_value.txt
#./engine_switch_check.txt MACHINE_NAME MACHINE_NUMBER
echo `date +%T` >> test.txt
./engine_switch_check.txt MXE 065
./engine_switch_check.txt TMX5BP 001
./engine_switch_check.txt MX3 122
./engine_switch_check.txt TMX 098
dan engine_switch_check.txt :
#!/bin/bash
mc_id="$1" #-->eg: TMX
mc_no="$2" #-->eg: 098
echo "$mc_id $mc_no"
#echo "1--$mc_id$mc_no-DATAFILE.txt"
mc_fname=$mc_id$mc_no'_old_ignition_value.txt'
echo $mc_fname
#old_ignition_value=$(sed -n '1p' $mc_fname)
#echo "2--$old_ignition_value"
#old_ignition_value=$(sed -n '1p' $mc_id$mc_no'DATAFILE.txt')
#echo "3--$old_ignition_value"
new_ignition_value=`get values from the terminal`
old_ignition_value=$(sed -n '1p' $mc_id$mc_no'_old_ignition_value.txt')
echo "Program name: $0"
echo "New Ignition Value: $new_ignition_value"
echo "Old Ignition Value: $old_ignition_value"
echo;echo;echo
#difference_btwn_new_old_ign_values=$(awk '{print $1-$2}' <<< "$new_ignition_value $old_ignition_value")
difference_btwn_new_old_ign_values=$(($new_ignition_value - $old_ignition_value))
#difference_btwn_new_old_ign_values= expr new_ignition_value - old_ignition_value
echo "$new_ignition_value"
echo "$old_ignition_value"
echo "$difference_btwn_new_old_ign_values"
if [ "$difference_btwn_new_old_ign_values" -lt "1" ]
then
> $mc_id$mc_no'_initial_time.txt'
initial_time=`date +"%s"`
echo $initial_time >> $mc_id$mc_no'_initial_time.txt'
fi
if [ "$difference_btwn_new_old_ign_values" -ge "5" ]
then
final_time=`date +"%s"`
initial_time=$(sed -n '1p' $mc_id$mc_no'_initial_time.txt')
echo;echo;echo "initial time: $initial_time"
echo "final time: $final_time"
#initial_time=0000
time_difference_in_sec=$(( $final_time - $initial_time ))
echo "time difference in sec: $time_difference_in_sec"
time_difference_in_min=$(( $time_difference_in_sec / 60 ))
if [ "$time_difference_in_sec" -le "3600" ]
then
email_subject="$mc_id $mc_no switched on $difference_btwn_new_old_ign_values times within $time_difference_in_min minutes"
`echo -e "Hi there,nn$mc_id $mc_no has been switched on $difference_btwn_new_old_ign_values times within the last $time_difference_in_min minutesnnCheers," | mail -s "$email_subject" $email_list`
echo "EMAIL SENT"
: <<'psuedo'
> $mc_id$mc_no'_old_ignition_value.txt'
echo $new_ignition_value >> $mc_id$mc_no'_old_ignition_value.txt'
psuedo
fi
if [ "$time_difference_in_sec" -gt "3600" ]
then
> $mc_id$mc_no'_initial_time.txt'
initial_time=`date +"%s"`
echo $initial_time >> $mc_id$mc_no'_initial_time.txt'
fi
fi
Saya telah memotong detail terkait email tersebut, tetapi baris tersebut berfungsi dengan baik.
Sejujurnya saya tidak tahu apa lagi yang bisa saya lakukan. Satu-satunya perbedaan dengan file bash ini adalah ia memanggil file 'executable txt' lain dari dalamnya. Dan kedua file ini bekerja dengan baik dari terminal sendiri.
Terkait:Bagaimana cara menampilkan hasil `top` yang diurutkan berdasarkan penggunaan memori secara real time?
Pembaruan (18/02/2015):
Saya telah mencoba CronTab lebih lanjut dengan menulis skrip lain (lebih sederhana) untuk mengirim stempel waktu melalui email, juga mencatat stempel waktu ke dalam file .txt – yang berfungsi tanpa masalah. Saya menulis ulang karena saya berpikir mungkin CronTab tidak berfungsi sebagaimana mestinya.
Bagi siapa saja yang mengalami masalah serupa, berikut adalah beberapa opsi yang harus Anda pertimbangkan:
Hal lain yang saya lakukan selama pemecahan masalah (tidak berurutan)
- Membuat gema ke file teks untuk melihat apakah program sedang dijalankan
- Dihindari menggunakan sudo crontab -e semua orang merekomendasikan untuk menjauh dari sudo crontab -e
- Memeriksa jalur direktori di dalam crontab
- Baca/baca ulang berbagai forum, baca/baca ulang program saya berulang-ulang (mintalah orang lain yang mengerti pemrograman untuk melakukannya, karena mata baru dapat melihat apa yang mungkin Anda lewatkan)
- Menambahkan PATH dan SHELL ke crontab
- Menambahkan CronJob yang berbeda (pembaruan yang disebutkan 18/02/15)
- Mengubah jalur relatif ke jalur lengkap dalam semua program Ini membuatnya bekerja dengan crontab
Jawaban yang Diterima:
Saya pikir Anda perlu mengatur variabel path dalam skrip
Misalnya
PATH='/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin'