Durante uma sessão PHP (longa), faço um despejo SQL do banco de dados após cada alteração principal e armazeno o nome do arquivo de despejo em $_SESSION['lastbackup'] . No final da sessão, quero remover todos os despejos gerados, exceto o último (cujo nome está em $_SESSION['lastbackup'] ) com o seguinte script:
~/bin/removeoldbackups.sh :
#!/bin/bash
# remove all files in directory which are part of file pool ,
except when filename ==
# arguments:
# 1 directory path
# 2 filepool (with wild cards)
# 3 name of file NOT to be removed
if [ $# -lt 3 ]; then
# no 3rd parameter; 'none' assumed
keep="none"
else
keep=
fi
cd ""
for f in
do
if [ "$f" != "$keep" ]; then
rm "$f"
fi
done
exit
Quando eu o executo no prompt de comando com:
removeoldbackups.sh /media/fritzmedia/Elements/ubuntubackup mdvlp2*.sql mdvlp20161225-23:20:09.sql
funciona bem. No entanto, quando eu o executo na minha .php página da Web
shell_exec( '~/bin/removeoldbackups.sh
/media/fritzmedia/Elements/ubuntubackup ' .
'mdvlp2*.sql '.
$_SESSION['lastbackup'] );
Eu recebo o seguinte erro:
sh: 2: /media/fritzmedia/Elements/ubuntubackup: Permission denied
(Eu tentei exec em vez de shell_exec : não faz diferença.)
Eu acho que (como diz) isso significa que não é um problema de permissão de executar o script, mas de acessar (alguma parte do caminho para) os arquivos de backup.
Informação adicional:
-
fritzmedia é uma unidade externa montada em /media .
- Proprietário do arquivo para
/media is root:root ; para fritzmedia e de lá para baixo, é www-data:root .
- Permissões para
/media até os arquivos pretendidos: 0777 .
O script removeoldbackups.sh está em ~/bin ; dono root:root ; permissão 0755 .
Os arquivos de backup são criados por uma chamada de um arquivo PHP:
exec ( 'mysqldump -u -sqluser- -sqlpw- ' . $dbn . ' > ' . $dumpnaam );