【问题标题】:Starting a script via Cronjob from a specific directory (for automated git upload)?通过 Cronjob 从特定目录启动脚本(用于自动 git 上传)?
【发布时间】:2016-01-07 07:41:41
【问题描述】:

我有一个 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)

看来我只能在登录控制台并从 gitprojectfolder 启动 Perl 脚本时才能使用我的脚本。所以我的脚本需要从那里被调用。

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

【问题讨论】:

    标签: git perl shell crontab


    【解决方案1】:

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

    30 0 * * * cd /home/......../gitprojectfolder/ && sh cronjob.sh
    

    说明:

    目前,您的 cronjob.sh 被您的主目录中的 crontab 调用。您可以通过添加 cronjob 将工作目录写入文件来检查。

    40 13 * * * pwd >whereami.txt
    

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

    另请参阅this question on Linux & Unix SE 以获得更详细的说明。

    【讨论】:

    • 感谢您的回复。这正是我正在寻找的答案。按预期完美运行!
    【解决方案2】:

    在你的 perl 脚本中将目录更改为你的 git repo 目录:

    chdir("<git repo dir>");
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 2013-10-23
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多