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