通过 Cronjob 从特定目录启动脚本(用于自动 git 上传)?
Starting a script via Cronjob from a specific directory (for automated git upload)?
我有一个 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)
所以我似乎只能在登录到我的控制台并从 git 项目文件夹启动 Perl 脚本时使用我的脚本。所以我的脚本需要从那里调用。
有谁知道这是怎么可能的?我如何更改我的任何代码,以便从此 git 项目文件夹调用 Perl 脚本。
在您的 perl 脚本中将目录更改为您的 git 存储库目录:
chdir("<git repo dir>");
在您的 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 以获得更详细的解释。
我有一个 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)
所以我似乎只能在登录到我的控制台并从 git 项目文件夹启动 Perl 脚本时使用我的脚本。所以我的脚本需要从那里调用。
有谁知道这是怎么可能的?我如何更改我的任何代码,以便从此 git 项目文件夹调用 Perl 脚本。
在您的 perl 脚本中将目录更改为您的 git 存储库目录:
chdir("<git repo dir>");
在您的 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 以获得更详细的解释。