我有以下情况,可能很简单,但我不知道哪种方式在逻辑上是正确的以及如何准确地做到这一点。
我有多个站点,/www/
每个站点都位于自己的目录和用户中
/www/site1/ // user site1
/www/site2/ // user site2
/www/site3/ // user site3
现在我想做一个 cronjob ,它将运行 PHP 脚本并更新每个站点数据库中的一个表。
剧本和实际工作都没有问题。问题是如何正确地做到这一点?如何为每个用户创建作业?如果需要的话,Cronjob 将每半小时运行一次。
答案1
添加一个新用户 - 让我们称他们为allsites
。
将用户添加allsites
到/etc/group
forsite1
和userssite2
中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"
答案2
你写道:
每个站点都位于自己的目录和用户中
/www/site1/ // **user** site1
/www/site2/ // **user** site2
/www/site3/ // **user** site3
你的输出用户名是相同的,这是正确的吗?
如果您所在的位置的用户实际上不同,我会为每个用户创建三个单独的 cron:
for i in user1 user2 user3; do crontab -u $i -e ; done
并抛出为每个人准备的规则,例如(其中站点目录是你的网站{1,2,3}:
0,30 * * * * sh -c "cd /www/site_dir/ && /usr/bin/php ./tool.php -c Table_Update"