Shell 脚本未使用 cron 选项卡运行

Shell 脚本未使用 cron 选项卡运行

我的 shell 脚本没有使用 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 作业时已正确设置,很少需要修改。

如果您需要修改PATH变量来查找gitnodepm2命令(或任何其他非标准命令),那么我会在脚本本身而不是 crontab 中执行此操作。PATHcrontab 中的设置将修改PATHfor全部由该选项卡安排的 cronjobs,在许多情况下可能不需要。

从错误输出的最后一行来看,至少pm2在 default 中找不到该命令,因此有必要添加所在PATH目录。pm2PATH

您的脚本似乎也期望该cms目录存在,并且它显然尝试将一些配置文件从该目录移至某个 Git 存储库的新目录签出。目前还不清楚如果cms找不到目录会发生什么,或者为什么不直接git up在目录中执行操作cms

您签出的 Git 存储库名为Gestiaweb,但脚本需要一个名为 的目录Website。目前尚不清楚这些名称是否相关或者是否Website是预先存在的目录。

相关内容