Tidak dapat mengakses nilai dari loop for di skrip shell saat dijalankan dari cron

Ini adalah percobaan pertama saya dalam pembuatan skrip shell, jadi jika saya mengajukan pertanyaan yang sangat mendasar, harap bersikap lembut kepada saya!

Saya memiliki skrip shell yang mengunduh file melalui FTP, menggunakan split untuk memecah file menjadi file terpisah yang lebih kecil. Saya kemudian menggunakan loop for untuk memanggil file PHP yang melakukan beberapa pemrosesan pada file tersebut, proses PHP ini dijalankan di latar belakang hingga selesai.

Kombo 2 skrip ini berfungsi dengan baik ketika dijalankan dari baris perintah di bawah Sudo, namun ketika dijalankan dari cron sepertinya saya tidak bisa mendapatkan nilai nama file untuk diteruskan ke PHP.

2 skrip pengujian saya adalah sebagai berikut

shell-test.sh

#!/bin/bash

cd /path/to/directory/containing/split/files/

#Split the file into seperate 80k line files
split -l 80000 /path/to/file/needing/to/be/split/

#Get the current epoch time as all scripts will need to use the same update time
epochtime=$(date +"%s")

echo $epochtime

#Output a list of the files in the directory
ls


#For loop to run through each file in the working directory
#For each file we run the php script with safe mode off (to enable access to includes)
#We pass in the name of the file and epochtime
#The ampersand at the end of the string runs the file in the background in parallel so     that all scripts execute concurrently

for file in *
do
php -d safe_mode=Off /path/to/php/script/shell-test.php -f $file -t $epochtime &
done

#Wait for all scripts to finish
wait

shell-test.php

<?php

$scriptOptions = getopt("f:t:");

print_r($scriptOptions);

?>

Ketika dijalankan dari baris perintah, outputnya adalah yang saya perlukan - nilai file diteruskan ke skrip PHP.

1319824758
xaa  xab  xac  xad
Array
(
[f] => xaa
[t] => 1319824758
)
Array
(
[f] => xac
[t] => 1319824758
)
Array
(
[f] => xad
[t] => 1319824758
)
Array
(
[f] => xab
[t] => 1319824758
)

Namun ketika dijalankan melalui cron, output berikut ini

1319825522
xaa
xab
xac
xad
Array
(
[f] => *
[t] => 1319825522
)

Jadi yang perlu saya ketahui adalah bagaimana mendapatkan nilai * sebagai nama file dan bukan sebagai string * yang sebenarnya (dan mengapa ini terjadi akan berguna juga!).


person Sagaris    schedule 28.10.2011    source sumber


Jawaban (1)


Tebakan acak saya adalah cron menjalankan shell dengan opsi -f untuk keamanan. Coba tambahkan

set +f

ke skrip Anda. Atau temukan cara lain untuk menghitung file.

person Neil    schedule 28.10.2011
comment
Bagus sekali - terima kasih banyak! Harus membaca dampak menjalankan cron dengan perubahan opsi ini. Adakah yang bisa merekomendasikan sumber daya yang layak untuk seorang pemula dalam subjek khusus ini? - person Sagaris; 30.10.2011