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

sh/bash/dash/ksh/zsh等Shell脚本
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#1

帖子 xsuii » 2013-04-04 17:56

最近在弄脚本为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
附件
30ab12125382251fa1004a856ac3a2bf.png
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34
送出感谢: 2 次
接收感谢: 5 次

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

#2

帖子 needle » 2013-04-04 23:32

真奇怪~~~
用set打日志吧
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#3

帖子 xsuii » 2013-04-05 0:37

needle 写了:真奇怪~~~
用set打日志吧

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

初学者,多多指教 :em06
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34
送出感谢: 2 次
接收感谢: 5 次

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

#4

帖子 needle » 2013-04-05 0:45

我不知道set可不可以设置环境变量~
环境变量我一般用export

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

一个是启动调试模式:
在脚本内的开头set -x #开启调试模式(把脚本运行过程打印出来)
在脚本内的结尾set +x #关闭调试模式
接着在crontab中把正常输出和错误输出导向文件,可查看脚本运行全过程:
&>~/crontabrun.log
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#5

帖子 xsuii » 2013-04-05 2:19

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

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

#6

帖子 needle » 2013-04-05 3:32

请问这个API要如何关联~
是要用到命令,还是环境变量?
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

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

#7

帖子 daf3707 » 2013-04-05 11:10

crontab 中的%要转义
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#8

帖子 xsuii » 2013-04-05 11:53

needle 写了:请问这个API要如何关联~
是要用到命令,还是环境变量?
这里是我关联API的一次过程:
关联dropboxAPI.png
首先需要运行一次上传脚本来激活次过程,然后就根据shell中的提示和dropbox端交叉进行关联,分别需要从dropbox端获取App key、App secret、选择创建app的类型……
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#9

帖子 xsuii » 2013-04-05 11:57

daf3707 写了:crontab 中的%要转义
我的crontab中没有%啊,那是我的shell脚本。而且我在shell中调试过,是没问题的...现在我也大致知道原因了,你可以看看我帖子的回复。
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34
送出感谢: 2 次
接收感谢: 5 次

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

#10

帖子 needle » 2013-04-05 13:25

脚本运行时,应该不用交互吧~
如果直接运行可以成功,那试试:

代码: 全选

#!/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"
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

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

#11

帖子 eexpress » 2013-04-05 13:33

cron里面,需要设置执行路径。cron可不是shell。
/backup/??你这啥路径哦。
● 鸣学
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#12

帖子 xsuii » 2013-04-05 15:31

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

我想听听你是怎么分析的?
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#13

帖子 xsuii » 2013-04-05 15:33

eexpress 写了:cron里面,需要设置执行路径。cron可不是shell。
/backup/??你这啥路径哦。
我的cron是这样写的

代码: 全选

* * * * * bash /backup/BackupUploda.sh
不过问题现在解决了...还是要感谢你的围观啊~
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

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

#14

帖子 eexpress » 2013-04-05 15:40

估计只是表明解决。
设置环境变量,至少要设置SHELL PATH;分清是哪个帐号的cron,谁的cron做谁的事情,不应该指望脚本里面还使用su。
● 鸣学
xsuii
帖子: 14
注册时间: 2013-04-04 13:16
系统: ubuntu12.04
送出感谢: 1 次
接收感谢: 0

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

#15

帖子 xsuii » 2013-04-05 15:54

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

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

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

回到 “Shell脚本”