Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
hzqim
V2EX  ›  Linux

crontab 出错,求指点。

  •  
  •   hzqim · May 31, 2014 · 3148 views
    This topic created in 4409 days ago, the information mentioned may be changed or developed.
    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里已经声明。

    谢谢解答。
    6 replies    2014-05-31 17:14:28 +08:00
    yangqi
        1
    yangqi  
       May 31, 2014   ❤️ 1
    crontab里要用全路径
    csx163
        2
    csx163  
       May 31, 2014   ❤️ 1
    加个>> $HOME/for_crontab/mylog.log 2>&1 到crontab后面
    Tink
        3
    Tink  
    PRO
       May 31, 2014   ❤️ 1
    全路径+1 backup.sh要全路径,sh也要全路径
    superbear
        4
    superbear  
       May 31, 2014   ❤️ 1
    @yangqi +1
    kaichen
        5
    kaichen  
    PRO
       May 31, 2014   ❤️ 1
    如果不想使用全设置,又不想去设置变量,那么可以在Shebang使用bash -l,或者在crontab上调用bash时带上-l选项。

    使用-l选项,可以作为Login shell执行脚本,这样环境变量什么都设置好了。
    hzqim
        6
    hzqim  
    OP
       May 31, 2014
    @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便无法运行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   914 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 22:33 · PVG 06:33 · LAX 15:33 · JFK 18:33
    ♥ Do have faith in what you're doing.