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既存のディレクトリであるかは不明です。

おすすめ記事