Попытайтесь использовать "в качестве разделителя:
date.timezone = "America/Puerto_Rico"
И апач перезагрузки!
Это еще одна моя идея, заключающаяся в том, что цикл может терять аргументы позиции;
directory1=$1
directory2=$2
echo "starting" > /var/www/html/${directory2}.log
rep=`du -sk /home/repository_${directory1} | awk '{print $1}'`
dirsize=`du -sk /home/${directory2} | awk '{print $1}'`
while [ "$dirsize" -lt "$rep" ]; do
dirsize=`du -sk /home/${directory2} | awk '{print $1}'`
echo "New directory size: $dirsize."
echo "$dirsize\\$rep" > /var/www/html/${directory2}.log
sleep 2;
done
echo "Loop Complete"
echo "done" > /var/www/html/${directory2}.log
/ bin / bash
, а не sh
, поскольку в sh
отсутствуют некоторые функции (мусор); -) Вероятно, что пользователь, у которого php / apache запускает скрипт, не имеет разрешения на доступ к нему или несколько файлов в вашем сценарии, или что selinux или какое-то ограничение безопасности не позволяет apache / php запускать интерпретатор sh
.
try $ ps -ef | egrep "(php | httpd | apache)"
, когда скрипт запущен, чтобы увидеть, можете ли вы определить, от имени какого пользователя работает php.
попробуйте запустить скрипт от имени пользователя apache, например;
sudo -u apache /bin/bash -x script.sh arg1 arg2
следует предоставьте выходные данные с включенной отладкой, чтобы увидеть, где может быть проблема.
Если скрипт запущен, но застрял, вы можете использовать strace, чтобы посмотреть, что застряло, делая вот так;
# ps -ef | grep sleep
root 24242 22711 0 14:02 pts/0 00:00:00 sleep 10000
root 24249 22711 0 14:03 pts/0 00:00:00 grep sleep
# strace -fp 24242
Process 24242 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...> <unfinished ...>
Попробуйте использовать полные пути в ваших командах. Часто среда bash, которую вы используете при входе в систему, может отличаться при запуске команды через сценарий. Поэтому некоторая информация, например пути, может быть потеряна.