我有一个git存储库,每天晚上我想要一个cronjob,它将已处理的数据加载到我的git存储库中。
所以首先我每天用cronjob调用一个shell脚本:
30 0 * * * sh /home/......../gitprojectfolder/cronjob.sh
此shell文件生成mysql备份输出。生成备份后,它会使用Perl脚本将备份转换为新文档。
这就是调用Perl脚本的方式(通过绝对路径< =这可行):
perl /home/....../gitprojectfolder/upload_documents.pl
Perl脚本在生成新文档后也会启动git上传。
这就是Perl代码中相关行的外观:
system("git add --all");
system("git commit -am 'Upload of public documents'");
system("git push https://*******.git");
当我使用服务器上的git项目文件夹转到目录时:
cd gitprojectfolder
# followed by my script
perl upload_documents.pl
然后git上传工作正常。
如果我通过cronjob调用Perl脚本:
perl /home/...../gitprojectfolder/upload_documents.pl
或者如果我从任何其他目录调用它,那么上传不起作用:
fatal: Not a git repository (or any parent up to mount point /home)
因此,当我登录我的控制台并从gitproject文件夹启动Perl脚本时,我似乎只能使用我的脚本。所以我的脚本需要从那里调用。
有谁知道这是怎么回事?如何更改我的任何代码,以便从此git项目文件夹调用Perl脚本。
答案 0 :(得分:5)
在你的cronjob中,首先将当前作业30 0 * * * cd /home/......../gitprojectfolder/ && sh cronjob.sh
放到工作目录,然后从那里调用脚本。
cronjob.sh
<强>解释强>
当你的家庭目录中的crontab调用你的40 13 * * * pwd >whereami.txt
时。您可以通过添加cronjob来检查文件中的工作目录。
<a href="#" class="js-scroll" data-target="yourClass">link</a>
当然,相应地调整日期和时间。
另请参阅this question on Linux & Unix SE以获取更详细的说明。
答案 1 :(得分:3)
在perl脚本中,将目录更改为git repo目录:
chdir("<git repo dir>");