cron 탭을 사용하여 쉘 스크립트가 실행되지 않습니다.

cron 탭을 사용하여 쉘 스크립트가 실행되지 않습니다.

내 쉘 스크립트가 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의 설정 은gitnodepm2PATHPATH모두이 탭에서 예약된 크론작업은 대부분의 경우 필요하지 않을 수 있습니다.

오류 출력의 마지막 줄을 보면 최소한 해당 명령은 기본적으로 찾을 수 없으므로 해당 명령이 위치한 디렉터리를 pm2추가해야 합니다 .PATHpm2PATH

귀하의 스크립트는 또한 해당 디렉터리가 존재할 것으로 예상 cms하고 해당 디렉터리의 일부 구성 파일을 일부 Git 저장소의 새 디렉터리 체크아웃으로 이동하려고 시도하는 것 같습니다. cms디렉터리를 찾을 수 없으면 어떤 일이 발생하는지, 또는 git up디렉터리에서 작업이 직접 수행되지 않는 이유는 명확하지 않습니다 cms.

체크아웃한 Git 저장소의 이름은 Gestiaweb이지만 스크립트에는 이라는 디렉터리가 필요합니다 Website. 이러한 이름이 관련되어 있는지 또는 Website기존 디렉토리인지는 확실하지 않습니다.

관련 정보