Saya punya skrip test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
ketika saya menjalankan file sebagai root dari baris perintah berfungsi.
sh /home/v/test.sh
ketika saya mengaturnya ke crontab -e (adalah root cron), tidak berfungsi
* * * * * sh /home/v/test.sh
Apa yang saya lakukan salah? Terima kasih
Jawaban:
Menurut pria itu:
Jadi cron daemon tidak tahu di mana php berada dan Anda harus menentukan path php lengkap dengan tangan, misalnya (Saya tidak tahu jalur PHP asli Anda):
Cara lain adalah dengan mencari / etc / profile (atau .profile / .bashrc) Anda, misalnya
Ini berguna jika .bashrc Anda mengatur variabel lingkungan yang Anda butuhkan (yaitu PATH)
EDIT
Bacaan yang menarik adalah " Newbie: Intro to cron ", jangan meremehkan artikel dari judul (Ini bacaan untuk semua orang), bahkan itu ditulis dengan lengkap dan menjawab pertanyaan Anda dengan sempurna:
sumber
Ada empat penyebab umum untuk perintah yang bekerja saat mengetik di terminal tetapi tidak dari cron, dalam urutan kesamaan:
$PATH
, dan variabel-variabel lain yang diharapkan hilang.Jika pekerjaan Anda menghasilkan output apa pun, termasuk pesan kesalahan, cron mengirimi Anda email dengan seluruh output. Pastikan Anda membaca surat yang Anda terima secara lokal atau meneruskannya ke alamat yang Anda baca. Untuk meneruskan email dari akun lokal ke beberapa alamat lain, masukkan alamat lainnya
~/.forward
. Jika tugas cron dijalankan sebagai pengguna sistem (root
,,webmaster
...), pastikan bahwa surat pengguna dialihkan ke Anda (dan admin lainnya); dengan sebagian besar pengaturan email, masukkan baris sepertiroot: elzo
di/etc/aliases
.sumber
Daemon cron biasanya mengeksekusi perintah Anda di shell di mana variabel lingkungan PATH dibatasi untuk beberapa sistem default, misalnya / usr / bin: / bin.
Mungkin,
php
perintah Anda tidak tersedia di / usr / bin atau / bin dan karenanya skrip gagal saat dijalankan melalui cron dan berjalan sukses saat tidak.Cron biasanya melaporkan kesalahan atau pesan pekerjaan melalui email ke pengguna root (yaitu ketika perintah mengembalikan status keluar! = 0 atau menghasilkan output ke stdout / stderr) setelah pekerjaan selesai.
Tergantung pada sistem Anda, Anda harus mengatur pengiriman surat lokal untuk mendapatkan pesan-pesan ini.
sumber