Невозможно получить доступ к значению цикла for в сценарии оболочки при запуске из cron - PullRequest
1 голос
/ 28 октября 2011

Это мой первый опыт написания сценариев оболочки, поэтому, если я задаю очень простой вопрос, пожалуйста, будьте осторожны со мной!

У меня есть сценарий оболочки, который загружает файл через FTP и использует split для разбиения файла на отдельные файлы меньшего размера. Затем я использую цикл for для вызова файла PHP, который выполняет некоторую обработку файла, этот процесс PHP выполняется в фоновом режиме до завершения.

Эта комбинация из 2 сценариев прекрасно работает при запуске из командной строки под sudo, однако, когда она запускается из cron, я не могу получить значение имени файла для передачи в PHP.

Мои 2 сценария тестирования следующие

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

оболочки test.php

<?php

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

print_r($scriptOptions);

?>

При запуске из командной строки выдает следующее, что мне нужно - значение файла передается в скрипт 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
)

Однако при запуске через cron выдается следующее

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

Так что мне нужно знать, как получить значение * в качестве имени файла, а не в качестве реальной строки * (и почему это происходит, было бы также полезно!).

1 Ответ

2 голосов
/ 28 октября 2011

Мое случайное предположение состоит в том, что cron запускает оболочку с опцией -f для безопасности. Попробуйте добавить

set +f

к вашему сценарию. Или найдите другой способ перечисления файлов.

...