내 쉘 스크립트가 cron 탭을 사용하여 실행되고 있지 않습니다. 을 사용하여 이 스크립트를 실행하면 sudo ./myscript.sh
모든 것이 잘 작동합니다.
myscript.sh
:
#!/bin/bash
if ! cd /var/www/myfolderapps/myfolderapp; then
echo 'Failed to cd to /some/dir' >&2
exit 1
fi
mv cms/configs/database.json ./
mv cms/configs/options.json ./
mv cms/configs/analytics.json ./
mv cms/sql/patchs.json ./
mv cms/public/uploads ./
mv cms/node_modules ./
rm -rf cms
git clone [email protected]:****/myproject.git
mv myproject cms
rm -rf ./cms/configs/database.json
rm -rf ./cms/configs/options.json
rm -rf ./cms/configs/analytics.json
rm -rf ./cms/sql/patchs.json
rm -rf ./cms/public/uploads
mv ./options.json ./cms/configs
mv ./database.json ./cms/configs
mv ./analytics.json ./cms/configs
mv ./patchs.json ./cms/sql
mv ./uploads ./cms/public
mv ./node_modules ./cms
cd cms
node sql/index.js
node scripts/mergeOptions.js
rm -rf ./tasks
rm -rf .bowerrc
rm -rf .eslintrc.json
rm -rf .gitignore
rm -rf .scss-lint.yml
rm -rf bower.json
rm -rf changelog-template.hbs
rm -rf CHANGELOG.md
rm -rf gulpfile.js
rm -rf README.md
cd ../
/usr/local/bin/pm2 restart process.json
exit;
내 응용 프로그램이 다른 폴더에서 실행 중입니다.
Cloning into 'myproject'...
DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log
[PM2] Applying action restartProcessId on app [myfolderapp](ids: 0)
[PM2] [myfolderapp](0) ✓
┌─────────────────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├─────────────────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ myfolderapp │ 0 │ fork │ 5236 │ online │ 137478 │ 0s │ 0% │ 15.3 MB │ root │ disabled │
└─────────────────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
답변1
귀하의 스크립트는 특정 디렉터리를 현재 디렉터리로 사용하여 실행되고 있다고 가정하는 것 같습니다. 현재 디렉토리가 올바르게 설정된 상태에서 스크립트를 시작했는지 확인하십시오 cd
.
예를 들어, cms
디렉토리가 있는 경우 /some/dir
다음과 같은 것을 사용하십시오.
#!/bin/bash
if ! cd /some/dir; then
echo 'Failed to cd to /some/dir' >&2
exit 1
fi
# rest of script goes here
/some/dir
디렉토리가 존재하지 않거나 현재 사용자가 cd
어떤 이유로 디렉토리에 들어갈 수 없는 경우 스크립트가 종료되고 진단 메시지가 표시됩니다.
git
명령(또는 기타 유틸리티)이 사용자의 홈 디렉터리에 있는 파일에 대한 액세스(예: 인증)를 요구하는 경우 HOME
사용자의 홈 디렉터리가 아닌 다른 디렉터리를 설정하면 명령이 실패하거나 예상대로 작동하지 않습니다. 이 HOME
변수는 일반적으로 cron 작업이 실행될 때 올바르게 설정되며 수정할 필요가 거의 없습니다.
find 또는 command ( 또는 기타 비표준 명령)를 PATH
위해 변수를 수정해야 하는 경우 crontab이 아닌 스크립트 자체에서 수정합니다. crontab의 설정 은git
node
pm2
PATH
PATH
모두이 탭에서 예약된 크론작업은 대부분의 경우 필요하지 않을 수 있습니다.
오류 출력의 마지막 줄을 보면 최소한 해당 명령은 기본적으로 찾을 수 없으므로 해당 명령이 위치한 디렉터리를 pm2
추가해야 합니다 .PATH
pm2
PATH
귀하의 스크립트는 또한 해당 디렉터리가 존재할 것으로 예상 cms
하고 해당 디렉터리의 일부 구성 파일을 일부 Git 저장소의 새 디렉터리 체크아웃으로 이동하려고 시도하는 것 같습니다. cms
디렉터리를 찾을 수 없으면 어떤 일이 발생하는지, 또는 git up
디렉터리에서 작업이 직접 수행되지 않는 이유는 명확하지 않습니다 cms
.
체크아웃한 Git 저장소의 이름은 Gestiaweb
이지만 스크립트에는 이라는 디렉터리가 필요합니다 Website
. 이러한 이름이 관련되어 있는지 또는 Website
기존 디렉토리인지는 확실하지 않습니다.