crontab对用户权限有什么限制吗?
还是哪边出了什么问题?
真想有人能交流一下!

解决方案 »

  1.   

    看看你的/home/backup.sh权限是多少?
      

  2.   

    直接用root执行
    pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
    会得到什么呢?
      

  3.   

    1."/home/backup.sh"的权限:
    “用户”、“组”、“其他”都可以“读取”、“写入”、“执行”2.直接用root执行:
    pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
    当然是备份数据库了!生成一个"当天日期"+dbname.dump的源文件,以后用psql命令恢复!我的问题:
    直接执行./backup.sh,可以备份成功。
    在cron执行./backup.sh 每天只生成了一个0B大小的空文件,真是头疼啊!
      

  4.   

    你是把定时进程加入到postgres的cron中的吧,问题应该在于一个环境变量问题,你如果直接在命令行下执行,该用户登陆时已经加载了环境变量了的。如果在cron进程中,要执行某个命令,要把这个命令的目录也写清楚,比如你的可以改为(比如你的psql装在/usr/local/pgsql/下):
    #!/bin/sh
    /usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
    这样应该可以正常执行的,或者把你的命令加入的root的cron中,命令改为:
    #!/bin/sh
    su - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'这样由root su到postgres时会自动加载该用户的环境变量
      

  5.   

    多谢楼上!
    如你所说到postgres的cron中执行:
    #!/bin/bash
    /usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
    备份成功!但是你说的第二中方法到root的cron中
    #!/bin/bash
    su - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'
    就不能定时备份了!而且不能直接执行此命令!
      

  6.   

    可以执行的,我都试过的,要么就是你shell写的有问题,手工执行比如:
    su - postgres -c 'pg_dump -U postgres dbname > /database/backup/050426dbname.dump'
    就可以执行,也可能你根本没把/usr/local/pgsql/bin目录加入的profile中的PATH环境变量中,那当然也会找不到pg_dump这个命令了,还需要你把目录的命令也写出来。
      

  7.   

    当然手工执行是要在root提示符下
      

  8.   

    感谢trampwind(随风) ,
    我习惯把/usr/local/pgsql/bin下的文件复制到/sbin目录下,
    所以也无所谓设置profile中的PATH环境变量了吧!
    我确实是不能执行此命令,总是会报错:
    -bash: line 1: /database/data/050426dbname.dump:Permission denied
    有点头疼!
      

  9.   

    看样子象是postgres用户没有在/database/data/目录下写文件的权限,可以用root: 
    chown postgres /database/data/把这个目录赋权,如果该目录下有root创建的050426dbname.dump这个名称的文件,那么postgres也是无权覆盖的,先用root把该文件删除,我随便写了个测试脚本BACKUP.SH:
    #!/bin/sh
    rq=` date +%m%d `
    su - postgres -c 'pg_dump -U postgres mydb>/home/postgres/jh/dbname$rq.dump'
    执行这个脚本没问题的。
      

  10.   

    还是有点问题!
    不过还是非常感谢 trampwind