나는 다음과 같은 상황에 처해 있습니다. 아마도 간단하지만 어떤 방법이 논리적으로 정확하고 정확히 수행하는 방법을 모르겠습니다.
여러 사이트가 있고 /www/
각 사이트에는 자체 디렉터리와 사용자가 있습니다.
/www/site1/ // user site1
/www/site2/ // user site2
/www/site3/ // user site3
이제 PHP 스크립트를 실행하고 각 사이트의 데이터베이스에 있는 테이블을 업데이트하는 cronjob을 만들고 싶습니다.
대본이나 실제 작업에는 아무런 문제가 없었습니다. 문제는 이것을 올바르게 수행하는 방법입니다. 각 사용자에 대한 작업을 생성하는 방법은 무엇입니까? Cronjob은 필요한 경우 30분마다 실행됩니다.
답변1
allsites
새 사용자를 추가합니다 . 사용자를 호출해 보겠습니다 .
for 및 users 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"
답변2
당신은 다음과 같이 썼습니다:
각 사이트는 자체 디렉토리와 사용자에 있습니다.
/www/site1/ // **user** site1
/www/site2/ // **user** site2
/www/site3/ // **user** site3
출력된 사용자 이름이 동일합니다. 맞습니까?
귀하의 위치에 있는 사용자가 실제로 다른 경우 각 사용자에 대해 세 개의 별도 크론을 생성합니다.
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"