技术解析

crontab 出错,求指点。
0
2021-07-16 20:44:33
idczone
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里已经声明。

谢谢解答。
crontab里要用全路径

加个>> $HOME/for_crontab/mylog.log 2>&1 到crontab后面

全路径+1 backup.sh要全路径,sh也要全路径

+1

如果不想使用全设置,又不想去设置变量,那么可以在Shebang使用bash -l,或者在crontab上调用bash时带上-l选项。
使用-l选项,可以作为Login shell执行脚本,这样环境变量什么都设置好了。


@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便无法运行。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服