У меня есть следующий случай, который может быть простым, но я не знаю, какой из них логически правильный и как это сделать. точно.
У меня есть несколько сайтов в / www /
, каждый сайт находится в собственном каталоге и у пользователя
/www/site1/ // user site1
/www/site2/ // user site2
/www/site3/ // user site3
Теперь я хочу сделать cronjob, который будет запускать скрипт PHP и обновлять одну таблицу в базе данных каждого сайта.
Сценарий и реальная работа не проблема. Проблема в том, как это правильно сделать? Как создать для каждого пользователя задание? Cronjob будет запускаться каждые полчаса, если это важно.
Добавить нового пользователя - назовем их allsites
.
Добавьте пользователя allsites
в /etc/group
для пользователей site1
, site2
и site3
.
Запустите сценарий от роли пользователя allsites
.
Затем запустите один сценарий с различными сведениями для каждого сайта, включенными в сценарий. Для (очень простого) примера. Копия script-name.sh
находится в каждом из каталогов $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
Другим базовым примером может быть что-то вроде следующего. Один сценарий будет извлекать пользовательскую конфигурацию.
#!/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
config.sh
, который содержит уникальные сведения для каждого сайта, будет примерно таким:
#!/bin/sh
# User name for DB connection??
username="site1user"
Вы написали, что:
каждый сайт находится в своей директории и пользователь
/www/site1/ // **user** site1
/www/site2/ // **user** site2
/www/site3/ // **user** site3
На вашем выводе имя пользователя одинаковое, это верно?
Если пользователи у вас действительно разные, то я создаю три отдельных крона для каждого из них:
for i in user1 user2 user3; do crontab -u $i -e ; done
и кидаю правило, подготовленное для каждого из них, например (где site_dir - это ваши site{1,2,3}:
0,30 * * * * sh -c "cd /www/site_dir/ && /usr/bin/php ./tool.php -c Table_Update"