crontab 出错,求指点。

2014-05-31 09:40:07 +08:00
 hzqim
Linux小白遇到问题

backup.sh有一行是这样的:
tar -jcf $DIR/$TAR -C $PHPDIR ssl www -C $NGINXDIR conf.d -C $DIR *.sql && rm -rf $DIR/*.sql
#把ssl www conf.d 这三个文件夹和 sql文件打包,如果成功,删除sql文件。
sh backup.sh没有问题,但是用crontab就停止在这里,变量在backup.sh里已经声明。

谢谢解答。
2575 次点击
所在节点    Linux
6 条回复
yangqi
2014-05-31 09:44:02 +08:00
crontab里要用全路径
csx163
2014-05-31 09:45:03 +08:00
加个>> $HOME/for_crontab/mylog.log 2>&1 到crontab后面
Tink
2014-05-31 12:35:11 +08:00
全路径+1 backup.sh要全路径,sh也要全路径
superbear
2014-05-31 12:51:44 +08:00
@yangqi +1
kaichen
2014-05-31 16:55:40 +08:00
如果不想使用全设置,又不想去设置变量,那么可以在Shebang使用bash -l,或者在crontab上调用bash时带上-l选项。

使用-l选项,可以作为Login shell执行脚本,这样环境变量什么都设置好了。
hzqim
2014-05-31 17:14:28 +08:00
@yangqi
@csx163
@Tink
@superbear

谢谢您们的指点,crontab一般是要求绝对路径的,但本例中的问题出在*.sql
如果新建一个文件夹 sql ,之后把数据库导出至sql文件夹中,上述命令改成
tar -jcf $DIR/$TAR -C $PHPDIR ssl www -C $NGINXDIR conf.d -C $DIR sql && rm -rf $DIR/sql
就能通过。

另外,如果不新建sql文件夹,把*.sql改成具体的文件名,也是可以正确运行的。所以,我想问题出在crontab把 *.sql理解成文件名而不是通配符,而事实不存在‘*.sql’这个文件,导致不能完全打包,之后的命令rm -rf $DIR/*.sql便无法运行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/115150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX