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 );