Cronjob (s) para vários usuários

0

Eu tenho o seguinte caso, que pode ser simples, mas não sei qual é o caminho correto logicamente e como fazê-lo exatamente.

Eu tenho vários sites em /www/ cada site está no próprio diretório e usuário

/www/site1/  // user site1
/www/site2/  // user site2
/www/site3/  // user site3

Agora quero fazer o cronjob, que executará o script PHP e atualizará uma tabela no banco de dados de cada site.

O script e o trabalho real não são problema. O problema é como fazê-lo corretamente? Como criar para cada trabalho de usuário? O Cronjob será executado a cada meia hora se for importante.

    
por S.I. 19.10.2016 / 11:45

2 respostas

1

Adicione um novo usuário - vamos chamá-lo de allsites .

Adicione o usuário allsites aos usuários /etc/group para site1 , site2 e site3 .

Execute o script como o usuário allsites .

Em seguida, execute um único script com os detalhes diferentes por site incluídos no script. Por exemplo (muito básico). Uma cópia de script-name.sh está localizada em cada um dos diretórios $LIST :

#!/bin/sh

# The base location of each site
LIST="/path/to/site1 /path/to/site2 /path/to/site3"

# Place script-name.sh in each of the above paths
SCRIPT_NAME="script-name.sh"

for i in $LIST
do
    sh "${i}/${SCRIPT_NAME}"
done

Outro exemplo básico seria algo como o seguinte. Um único script extrairá uma configuração personalizada.

#!/bin/sh

# The base location of each site
LIST="/path/to/site1 /path/to/site2 /path/to/site3"

# Place details for each site in config.sh in each of the above paths
CONFIG="config.sh"

for i in $LIST
do
    # Pull in the config for the current site
    . "${i}/${CONFIG}"
    # Add your commands here that use the details from $CONFIG
    echo "EXAMPLE: user name: $username"
done

O config.sh que contém os detalhes exclusivos por site seria algo assim:

#!/bin/sh

# User name for DB connection??
username="site1user"
    
por 19.10.2016 / 12:14
1

Você escreveu isso:

each site is in own directory and user

/www/site1/  // **user** site1
/www/site2/  // **user** site2
/www/site3/  // **user** site3

No seu nome de usuário de saída são os mesmos, está correto?

Se os usuários forem realmente diferentes em seu lugar, criei três crons separados para cada um deles:

for i in user1 user2 user3; do crontab -u $i -e ; done

e jogou a regra preparada para cada um deles, por exemplo (onde site_dir é o seu site {1,2,3} :

0,30 * * * * sh -c "cd /www/site_dir/ && /usr/bin/php ./tool.php -c Table_Update"
    
por 19.10.2016 / 11:57

Tags