分页: 1 / 2

ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-04 17:56
xsuii
最近在弄脚本为ubuntu备份,并使用另一个脚本上传至dropbox,并且用cron做定时任务,有三个脚本,详细如下:

1、备份脚本 backup.sh:用来执行特定的备份任务,但这个不是重点。

2、上传脚本 dropbox_uploader.sh(https://github.com/andreafabrizi/Dropbox-Uploader):
已关联dropbox API了,只需按命令格式来就可以对dropbox文件单一处理——上传、下载、删除……。

3、备份上传脚本BackupUpload.sh:
这里写了我一次运行所要对dropbox处理的所有文件,脚本内容如下:

代码: 全选

#!/bin/bash
#Upload
/backup/dropbox_uploader.sh upload /backup/$(date +"%Y.%m.%d.%a").tgz

#Delete backup-file 2-week-ago
/backup/dropbox_uploader.sh delete $(date -d '2 week ago' "+%Y.%m.%d.%a").tgz
如果直接运行脚本“./BackupUpload.sh”是成功的,但是不知道为什么加入cron后虽然有运行记录,但是不成功,即dropbox端没反应。运行记录见附件:

crontab:* * * * * bash /backup/BackupUploda.sh(鉴于试验,设置每分钟运行一次)

求大牛解救啊~~ :em20

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-04 23:32
needle
真奇怪~~~
用set打日志吧

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 0:37
xsuii
needle 写了:真奇怪~~~
用set打日志吧

可以详细些吗?set好像是设置环境变量的,你是说可能和环境变量有关?

初学者,多多指教 :em06

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 0:45
needle
我不知道set可不可以设置环境变量~
环境变量我一般用export

我只知道set的两个用法:
一个是设置非脚本环境下的命令行参数

一个是启动调试模式:
在脚本内的开头set -x #开启调试模式(把脚本运行过程打印出来)
在脚本内的结尾set +x #关闭调试模式
接着在crontab中把正常输出和错误输出导向文件,可查看脚本运行全过程:
&>~/crontabrun.log

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 2:19
xsuii
needle 写了: 在脚本内的开头set -x #开启调试模式(把脚本运行过程打印出来)
在脚本内的结尾set +x #关闭调试模式
接着在crontab中把正常输出和错误输出导向文件,可查看脚本运行全过程:
&>~/crontabrun.log
嗯,我试过你的方法了,日志信息如下:
QQ截图20130405021242.png
大概知道什么原因了,就是第一次我要使用dropbox的上传脚本时,是需要和dropbox账户那边关联API的。我之前是在shell里面进行关联过,所以可以运行成功。但是当用cron的root运行时,从信息得知,它并没关联API,这就头痛了,应该怎样设置才能使cron执行时是关联了dropbox的API呢?

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 3:32
needle
请问这个API要如何关联~
是要用到命令,还是环境变量?

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 11:10
daf3707
crontab 中的%要转义

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 11:53
xsuii
needle 写了:请问这个API要如何关联~
是要用到命令,还是环境变量?
这里是我关联API的一次过程:
关联dropboxAPI.png
首先需要运行一次上传脚本来激活次过程,然后就根据shell中的提示和dropbox端交叉进行关联,分别需要从dropbox端获取App key、App secret、选择创建app的类型……

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 11:57
xsuii
daf3707 写了:crontab 中的%要转义
我的crontab中没有%啊,那是我的shell脚本。而且我在shell中调试过,是没问题的...现在我也大致知道原因了,你可以看看我帖子的回复。

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 13:25
needle
脚本运行时,应该不用交互吧~
如果直接运行可以成功,那试试:

代码: 全选

#!/bin/bash
#Upload
su -lc "/backup/dropbox_uploader.sh upload /backup/$(date +"%Y.%m.%d.%a").tgz"

#Delete backup-file 2-week-ago
su -lc "/backup/dropbox_uploader.sh delete $(date -d '2 week ago' "+%Y.%m.%d.%a").tgz"

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 13:33
eexpress
cron里面,需要设置执行路径。cron可不是shell。
/backup/??你这啥路径哦。

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 15:31
xsuii
needle 写了:

代码: 全选

#!/bin/bash
#Upload
su -lc "/backup/dropbox_uploader.sh upload /backup/$(date +"%Y.%m.%d.%a").tgz"

#Delete backup-file 2-week-ago
su -lc "/backup/dropbox_uploader.sh delete $(date -d '2 week ago' "+%Y.%m.%d.%a").tgz"
这个我试了下,确实可以 :em11

虽然不太明白具体怎样发生的,还是要感谢啊~

而且我之后试了试使用“su root”登录超级用户进行API的关联,对于我之前的脚本运行也可以通过,难道和你所讲的命令是一个道理?通过“su -l”登录root然后“su -c”执行后面的命令,再退出?

但好像又说不通啊~既然要用超级用户来关联,那么如果我只是在管理员的情况下关联了,然后再“su -l”登录root,不是还是没关联吗?

有点晕了,对于里面的关系 :em20

我想听听你是怎么分析的?

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 15:33
xsuii
eexpress 写了:cron里面,需要设置执行路径。cron可不是shell。
/backup/??你这啥路径哦。
我的cron是这样写的

代码: 全选

* * * * * bash /backup/BackupUploda.sh
不过问题现在解决了...还是要感谢你的围观啊~

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 15:40
eexpress
估计只是表明解决。
设置环境变量,至少要设置SHELL PATH;分清是哪个帐号的cron,谁的cron做谁的事情,不应该指望脚本里面还使用su。

Re: ubuntu使用脚本调用脚本,并用cron做定时任务,为什么执行不了?

发表于 : 2013-04-05 15:54
xsuii
eexpress 写了:估计只是表明解决。
设置环境变量,至少要设置SHELL PATH;分清是哪个帐号的cron,谁的cron做谁的事情,不应该指望脚本里面还使用su。
嗯,确实...我对于一些概念还是挺模糊的,就如“sudo -s”和“su root”的区别,又或者环境变量和它们的执行机理

如果要使脚本里不用su,那就要使用超级用户(su root)关联了...

还在不停的学习、研究中啊 :em06