如果我在命令行中运行这些命令,它将按预期工作。
git add * -v
git add . -v
git commit -m "This is the latest backup" -v
git tag -a v1.0.7 -m "my version v1.0.7" -v
git push origin v1.0.7 -v
但是,如果我在一个脚本名script.sh运行以下命令:
cd working_dir && sudo -u user1 git add * -v >> logfile1 2> /home/user1/another.log
cd working_dir && sudo -u user1 git add . -v >> logfile1 2> /home/user1/another.log
cd working_dir && sudo -u user1 git commit -m "This is the latest backup" -v >> logfile1 2> /home/user1/another.log
cd working_dir && sudo -u user1 git tag -a v1.0.7 -m "my version v1.0.7" -v >> logfile1 2> /home/user1/another.log
cd working_dir && sudo -u user1 git push origin v1.0.7 -v >> logfile1 2> /home/user1/another.log
然后有cron运行script.sh:
57 13 * * * user1 /usr/local/bin/script.sh
那么问题是,标签不被创建,也不是推的标签。
任何想法,我做错了什么?
有任意数量的事情可能出现了问题。检查您的cron日志是肯定的。
最有可能的是/usr/local/bin/script.sh
不起作用。这可能是因为它缺乏一个#!/bin/sh
,或者因为它尚未设置可执行文件(chmod +x /usr/local/bin/script.sh
)。这是很容易通过运行sudo -u user1 /usr/local/bin/script.sh
检查。
这也有可能是cd working_dir
失败,因为一个错字或权限问题。
所有sudo
东西是不必要的,因为是把用户的脚本到/usr/local/bin
。每个用户都有自己的cronfile,这可以通过user1
完全完成。
身份登录user1
。把脚本到~/bin/script.h
。确保它是可执行的。取出sudo
s。运行crontab -e
弹出user1
的cronfile。然后加...
57 13 * * * ~/bin/script.sh
...无需用户。