从特定目录通过Cronjob启动脚本(用于自动git上传)?

Don*_*elm 1 git shell perl crontab

我有一个git存储库,每天晚上我想要一个cronjob,它将处理过的数据加载到我的git存储库中.

所以首先我每天用cronjob调用一个shell脚本:

30 0 * * * sh /home/......../gitprojectfolder/cronjob.sh
Run Code Online (Sandbox Code Playgroud)

这个shell文件产生mysql备份输出.生成备份后,它会使用Perl脚本将备份转换为新文档.

这就是调用Perl脚本的方式(通过绝对路径<=这可行):

perl /home/....../gitprojectfolder/upload_documents.pl
Run Code Online (Sandbox Code Playgroud)

然后,Perl脚本在生成新文档后也会启动git上载.

这就是Perl代码中相关行的外观:

system("git add --all");
system("git commit -am 'Upload of public documents'");
system("git push https://*******.git");
Run Code Online (Sandbox Code Playgroud)

当我使用我的服务器上的git项目文件夹转到目录时:

cd gitprojectfolder
# followed by my script
perl upload_documents.pl
Run Code Online (Sandbox Code Playgroud)

然后git上传工作正常.

如果我通过cronjob调用Perl脚本:

perl /home/...../gitprojectfolder/upload_documents.pl
Run Code Online (Sandbox Code Playgroud)

或者如果我从任何其他目录调用它,那么上传不起作用:

fatal: Not a git repository (or any parent up to mount point /home)
Run Code Online (Sandbox Code Playgroud)

因此,当我登录到我的控制台并从gitproject文件夹启动Perl脚本时,我似乎只能使用我的脚本.所以我的脚本需要从那里调用.

有谁知道这有可能吗?如何更改我的任何代码,以便从此git项目文件夹调用Perl脚本.

sim*_*que 5

在您的cronjob中,首先将当前作业cd转到工作目录,然后从那里调用脚本.

30 0 * * * cd /home/......../gitprojectfolder/ && sh cronjob.sh
Run Code Online (Sandbox Code Playgroud)

说明:

目前cronjob.sh你的家庭目录中的crontab调用了你.您可以通过添加cronjob来检查文件中的工作目录.

40 13 * * * pwd >whereami.txt
Run Code Online (Sandbox Code Playgroud)

当然,相应地调整日期和时间.

另请参阅Linux和Unix SE上的这个问题以获得更详细的解释.