我正在尝试使用 bash 脚本执行 git commit
。
我已经设置了一个 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 ..
这是 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...
可以看到,git commit
和git push
执行失败,直接运行脚本就可以了。
这是 crontab
条目。
0 2 * * 2 /bin/bash /mnt/ebs2/sitemap/WeeklyUpdate.sh
我正在确保 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 ..
最佳答案
正如您从输出中看到的,这里的问题是当您的脚本运行时,它找不到您的 git
命令。您应该添加所有命令的完整路径。
当给 bash 一个命令时,它首先查找内置命令,然后开始检查 $PATH
中的命令。一个常见且容易犯的错误是假设如果您的脚本在您直接从 shell 运行时运行,那么它在任何地方都将运行相同,但事实并非如此,正如您在此处看到的那样。原因是当您进入登录 shell 时,您会获得许多额外的东西作为环境的一部分。特别是,.bash_login
通常在登录 shell 上执行。这使得运行命令更加方便,但这是您的 cron 作业所没有的奢侈。
与任何编程一样,最好不要对您的环境做任何额外的假设。如果它是您的脚本所依赖的东西,最好明确说明。这适用于任何命令的完整路径。
如果您需要从您的 shell 中找到命令的路径,您可以运行如下命令:
which git
这应该会为您提供完整路径,然后您可以将其添加到您的脚本中。然后只需在脚本中将 git
替换为 /your/full/path/to/git
。
关于git - 无法从 crontab 作业中提交 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600993/