QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1016|回复: 14

关于crontab的问题,求解!

[复制链接]
发表于 2005-4-19 11:23:05 | 显示全部楼层 |阅读模式
本人已所搜并浏览过本论坛的相关的文章!
对crontab有了不少了解,但是还有一个问题我想提出!
如果在执行时,遇到切换用户的命令,还能执行下去吗?
举个简单的例子!
仅两条命令:
su guest1       //切换用户
buckup .....     //执行备份或其他什么
上面这样能顺利执行吗?
 楼主| 发表于 2005-4-20 16:01:00 | 显示全部楼层
上面的问题一直没有得到解决
我来把问题说的具体一点
我是想用crontab给PostgreSQL数据库做备份
数据库有个postgres用户,为超级管理员
我一般备份用以下步骤:
    -进入终端
    -su postgres
    -pg_dump dbname > /database/backup/dbname.dump[/list:u]
    现在想让后台自动每天完成备份
    于是写了
    [code:1]#!/bin/sh
    su postgres
    pg_dump dbname > /database/backup/dbname.dump[/code:1]
    此文件名为“aaa.sh”,用户和组为:postgres,权限为可执行。
    然后在终端里面执行
    /home/postgres/aaa.sh

    结果只执行了第一步(切换用户),第二步(备份)就执行不下去了。
    于是我修改aaa.sh为
    [code:1]#!/bin/sh
    pg_dump dbname > /database/backup/dbname.dump[/code:1]
    然后在终端里,执行
    su postgres
    /home/postgres/aaa.sh

    备份成功!
    不过这种备份和手动完成差不了多少,要一次完成两个动作才能称为自动!

    现在连执行都成问题,更不要说后台自动完成了。
    我希望能发现问题出在哪里,是哪方面的问题,解决之路在何方?
    特向各位求助!
回复

使用道具 举报

发表于 2005-4-20 16:25:46 | 显示全部楼层
转到超级用户下是要用密码的,你只是su了,不输入密码,当然第二步执行不了了!
回复

使用道具 举报

发表于 2005-4-20 16:33:09 | 显示全部楼层
你可以用crontab给你的超级用户建个cron守护程序,这样到时候就可以自动执行了!参考一下代码:
[code:1]
0 17 * * * 'pg_dump dbname > /database/backup/dbname.dump'[/code:1]
这是在每天的下午五点自动执行后面的命令

可以先建个名为postgrescron的文件,文件内容为:
[code:1]
#backup the files everyday as postgrescron at 17:00
0 17 * * * 'pg_dump dbname > /database/backup/dbname.dump'[/code:1]
然后用你的超级用户,执行下面的命令:
[code:1]crontab postgrescron[/code:1]
这样在你的/var/spool/cron/crontabs/下就多了一个名为postgrescron的文件,试试看可以吗?
回复

使用道具 举报

 楼主| 发表于 2005-4-20 17:36:37 | 显示全部楼层
这个postgres并不是系统的超级用户
而是数据库的管理员,当然一定要在系统中存在!
如果我注销root,用postgres登录
进入终端,直接敲
pg_dump dbname > /database/backup/dbname.dump,也是无法备份的!
这点也比较奇怪,每次要在root下,用su切换,然后备份才能成功!
还有我/var/spool/cron下,没有crontabs文件,是不是需要建立一个!文件的格式是什么样的?
回复

使用道具 举报

发表于 2005-4-20 23:32:04 | 显示全部楼层
你用的是redhat吧,那就应该在/ v a r / s p o o l / c r o n下直接生成一个postgres的文件
为什么直接敲上那行不行呢,等我明天再给你试试那个脚本,今天太晚了:)
回复

使用道具 举报

发表于 2005-4-20 23:36:32 | 显示全部楼层
忽然感觉你这个有点问题,不过只能等明天了,明天给你试试!
回复

使用道具 举报

 楼主| 发表于 2005-4-21 09:14:06 | 显示全部楼层
我也试过用
crontab -u postgres -e

给postgres用户指定一个执行的命令
30 4 * * * pg_dump dbname > /database/backuo/dbname.dump

结果在/var/spool/cron/下,是生成了一个postgres文件
但是就是不能得到执行!
其实就是和我在postgres用户下,不能直接执行备份命令的情况是一样的!
一定要在root下用su命令转换到postgres,再来执行备份,太奇怪了!
顺便谢谢楼上的好心人!^_^
回复

使用道具 举报

发表于 2005-4-21 09:39:07 | 显示全部楼层
pg_dump这个命令的路径是什么,在crontab里好象是要写上命令的实际路径,比如ls,就要写/bin/ls,你先试试这个!
回复

使用道具 举报

发表于 2005-4-21 09:39:27 | 显示全部楼层
pg_dump这个命令的路径是什么,在crontab里好象是要写上命令的实际路径,比如ls,就要写/bin/ls,你先试试这个!
回复

使用道具 举报

发表于 2005-4-21 10:38:45 | 显示全部楼层
nohup
回复

使用道具 举报

 楼主| 发表于 2005-4-21 11:42:22 | 显示全部楼层
现在直接执行那个aaa.sh都无法进行备份,就更不用说cron了
PostgreSQL的权限问题真挺奇怪的!
回复

使用道具 举报

发表于 2005-4-21 18:47:02 | 显示全部楼层
估计需要好好配置,我不懂这个数据库东西!:(
回复

使用道具 举报

 楼主| 发表于 2005-4-22 08:16:00 | 显示全部楼层
目前是这样的!
在root用户模式下
1.建了一个backup.sh的文件
  内容如下:
  -----------------------------
  #!/bin/sh
  pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
  -----------------------------

2.直接进终端
  执行命令:/home/backup.sh
  备份成功!

3.进入终端
  执行命令:crontab -e
  敲入:30 4 * * * /home/backup.sh  , 保存退出。
  结果:时间到了没有执行备份,只生成了一个0B大小的空文件,名为:"当天日期"+dbname.dump

谁能看出问题?
回复

使用道具 举报

发表于 2005-4-22 10:59:19 | 显示全部楼层
今天特意实验了一下,我这里没有用数据库的东西,步骤如下
首先,建立一个脚本内容为:
[code:1]zhyfly@zhyfly:~/bash$ cat backup.sh
#!/bin/bash
ls>"/home/zhyfly/bash/file1"
[/code:1]
然后赋予权限:
[code:1]zhyfly@zhyfly:~/bash$ sudo chmod +x backup.sh
[/code:1]
然后export
[code:1]zhyfly@zhyfly:~/bash$ export PATH=$PATH:/home/zhyfly/bash/
[/code:1]
修改crontab文件为:
[code:1]#this is a test!
51 10 * * * /home/zhyfly/bash/backup.sh
zhyfly@zhyfly:~/bash$
[/code:1]
结果到10:51查看file1文件,成功!
最后将export  PATH=$PATH:/home/zhyfly/bash/这行写入~/.profile文件中!(这个没有测试),不知道你那个数据库中可不可以!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-6 13:57 , Processed in 0.085049 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表