私は次のような状況にあります。おそらく簡単ですが、どのような方法が論理的に正確で正確に実行されるのかわかりません。
複数のサイトがあり、/www/
各サイトには独自のディレクトリとユーザーがあります。
/www/site1/ // user site1
/www/site2/ // user site2
/www/site3/ // user site3
次に、PHPスクリプトを実行して各サイトのデータベース内のテーブルを更新するcronjobを作成したいと思います。
台本や実際の作業には何の問題もありませんでした。問題はこれを正しく行う方法です。各ユーザーのタスクを作成する方法は? Cronjobは必要に応じて30分ごとに実行されます。
答え1
allsites
新しいユーザーを追加します。ユーザーを呼び出してみましょう。
forとusersallsites
にユーザーを追加します。/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"
答え2
あなたは次のように書きました:
各サイトは独自のディレクトリとユーザーにあります。
/www/site1/ // **user** site1
/www/site2/ // **user** site2
/www/site3/ // **user** site3
出力されたユーザー名は同じです。そうですか?
あなたの場所にいるユーザーが実際に異なる場合は、各ユーザーに対して3つの別々のクローンを作成します。
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"