Bob-z 发表于 2005-4-19 11:23:05

关于crontab的问题,求解!

本人已所搜并浏览过本论坛的相关的文章!
对crontab有了不少了解,但是还有一个问题我想提出!
如果在执行时,遇到切换用户的命令,还能执行下去吗?
举个简单的例子!
仅两条命令:
su guest1       //切换用户
buckup .....   //执行备份或其他什么
上面这样能顺利执行吗?

Bob-z 发表于 2005-4-20 16:01:00

上面的问题一直没有得到解决
我来把问题说的具体一点
我是想用crontab给PostgreSQL数据库做备份
数据库有个postgres用户,为超级管理员
我一般备份用以下步骤:
-进入终端
-su postgres
-pg_dump dbname > /database/backup/dbname.dump
现在想让后台自动每天完成备份
于是写了
#!/bin/sh
su postgres
pg_dump dbname > /database/backup/dbname.dump
此文件名为“aaa.sh”,用户和组为:postgres,权限为可执行。
然后在终端里面执行
/home/postgres/aaa.sh
结果只执行了第一步(切换用户),第二步(备份)就执行不下去了。
于是我修改aaa.sh为
#!/bin/sh
pg_dump dbname > /database/backup/dbname.dump
然后在终端里,执行
su postgres
/home/postgres/aaa.sh
备份成功!
不过这种备份和手动完成差不了多少,要一次完成两个动作才能称为自动!

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

zhy2111314 发表于 2005-4-20 16:25:46

转到超级用户下是要用密码的,你只是su了,不输入密码,当然第二步执行不了了!

zhy2111314 发表于 2005-4-20 16:33:09

你可以用crontab给你的超级用户建个cron守护程序,这样到时候就可以自动执行了!参考一下代码:

0 17 * * * 'pg_dump dbname > /database/backup/dbname.dump'
这是在每天的下午五点自动执行后面的命令

可以先建个名为postgrescron的文件,文件内容为:

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

Bob-z 发表于 2005-4-20 17:36:37

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

zhy2111314 发表于 2005-4-20 23:32:04

你用的是redhat吧,那就应该在/ v a r / s p o o l / c r o n下直接生成一个postgres的文件
为什么直接敲上那行不行呢,等我明天再给你试试那个脚本,今天太晚了:)

zhy2111314 发表于 2005-4-20 23:36:32

忽然感觉你这个有点问题,不过只能等明天了,明天给你试试!

Bob-z 发表于 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,再来执行备份,太奇怪了!
顺便谢谢楼上的好心人!^_^

zhy2111314 发表于 2005-4-21 09:39:07

pg_dump这个命令的路径是什么,在crontab里好象是要写上命令的实际路径,比如ls,就要写/bin/ls,你先试试这个!

zhy2111314 发表于 2005-4-21 09:39:27

pg_dump这个命令的路径是什么,在crontab里好象是要写上命令的实际路径,比如ls,就要写/bin/ls,你先试试这个!

zhangzhaoao 发表于 2005-4-21 10:38:45

nohup

Bob-z 发表于 2005-4-21 11:42:22

现在直接执行那个aaa.sh都无法进行备份,就更不用说cron了
PostgreSQL的权限问题真挺奇怪的!

zhy2111314 发表于 2005-4-21 18:47:02

估计需要好好配置,我不懂这个数据库东西!:(

Bob-z 发表于 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

谁能看出问题?

zhy2111314 发表于 2005-4-22 10:59:19

今天特意实验了一下,我这里没有用数据库的东西,步骤如下
首先,建立一个脚本内容为:
zhyfly@zhyfly:~/bash$ cat backup.sh
#!/bin/bash
ls>"/home/zhyfly/bash/file1"

然后赋予权限:
zhyfly@zhyfly:~/bash$ sudo chmod +x backup.sh

然后export
zhyfly@zhyfly:~/bash$ export PATH=$PATH:/home/zhyfly/bash/

修改crontab文件为:
#this is a test!
51 10 * * * /home/zhyfly/bash/backup.sh
zhyfly@zhyfly:~/bash$

结果到10:51查看file1文件,成功!
最后将exportPATH=$PATH:/home/zhyfly/bash/这行写入~/.profile文件中!(这个没有测试),不知道你那个数据库中可不可以!
页: [1]
查看完整版本: 关于crontab的问题,求解!