Sha*_*mik 5 git shell cron git-commit
git commit我正在尝试使用 bash 脚本进行操作。我已经设置了一个 cron 作业来定期执行该脚本。如果我直接执行脚本,一切都会按预期进行。由于某种原因,当从 调用脚本时crontab,会git commit失败。这是脚本:
#!/bin/bash
cd /mnt/ebs2/sitemap
echo "Calling java application to generate sitemap"
java -jar SiteMap-1.0-jar-with-dependencies.jar -i sitemapconfig.xml -o /mnt/ebs2/sitemap/website_sitemaps -url ADSKContentURL
echo "sitemap generation complete.."
cd website_sitemaps
chmod 750 *
echo "Updated file permission, commiting to git..."
git commit -am 'automated weekly update'
git push -u
echo "git commit done..."
cd ..
Run Code Online (Sandbox Code Playgroud)
这是 crontab 的输出:
Calling java application to generate sitemap
sitemap generation complete..
Updated file permission, commiting to git...
/mnt/ebs2/sitemap/WeeklyUpdate.sh: line 10: git: command not found
/mnt/ebs2/sitemap/WeeklyUpdate.sh: line 11: git: command not found
git commit done...
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它无法执行git commitand git push,而当直接运行脚本时,它就可以工作。
这是crontab条目。
0 2 * * 2 /bin/bash /mnt/ebs2/sitemap/WeeklyUpdate.sh
Run Code Online (Sandbox Code Playgroud)
我确保 crontab 和脚本都在 bash 中执行。我使用的是 CentOS 5.11。
任何指示将不胜感激。
-谢谢,
沙米克
********** 编辑解决方案 **************
基于@CholNhial和@Marc,crontab需要完整的git路径来执行命令。我已更新脚本以使用完整路径。
#!/bin/bash
cd /mnt/ebs2/aknsitemap
echo "Calling java application to generate sitemap"
java -jar ADSKSiteMap-1.0-jar-with-dependencies.jar -i sitemapconfig_Elvis.xml -o /mnt/ebs2/aknsitemap/aknwebsite_sitemaps -url ADSKContentURL
echo "sitemap generation complete.."
cd aknwebsite_sitemaps
chmod 750 *
echo "Updated file permission, commiting to git..."
/usr/local/bin/git commit -am 'automated weekly update'
/usr/local/bin/git push -u
echo "git commit done..."
cd ..
Run Code Online (Sandbox Code Playgroud)
小智 1
正如您从输出中看到的,这里的问题是当您的脚本运行时,它找不到您的git命令。您应该添加所有命令的完整路径。
当给 bash 一个命令时,它首先查找内置命令,然后开始检查 .bashrc 中的命令$PATH。假设如果您的脚本在直接从 shell 运行时运行,那么它在任何地方都会以相同的方式运行,这是一个常见且容易犯的错误,但事实并非如此。原因是,当您进入登录 shell 时,您会获得许多额外的内容作为环境的一部分。特别是,.bash_login通常在登录 shell 上执行。这使得运行命令更加方便,但这是你的 cron 作业所没有的奢侈。
与任何编程一样,最好不要对您的环境做太多额外的假设。如果您的脚本依赖于此,最好明确说明。这适用于任何命令的完整路径。
如果您需要从 shell 中找到命令的路径,您可以运行如下命令:
which git
Run Code Online (Sandbox Code Playgroud)
这将为您提供完整路径,然后您可以将其添加到脚本中。然后只需在脚本中替换git为即可。/your/full/path/to/git
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |