crontab执行shell命令和执行php不能同时执行吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crontab执行shell命令和执行php不能同时执行吗?相关的知识,希望对你有一定的参考价值。
crontab -e 编辑如下内容
*/1 * * * * /home/sun/updata/updata.sh
*/2 * * * * /usr/local/bin/php -q /usr/local/apache2/htdocs/ftptest/ftptest.php
updata.sh是ftp上传文件的,手动能执行成功,在crontab下就不能了,而ftptest.php是遍历ftp文件夹的,在crontab下可以执行。这是为什么呢?我要一分钟上传一次文件,两分钟遍历一次文件夹,来监控文件夹的文件变化情况。该怎么做呢? 还请高手不吝赐教。悬赏大大的
/home/sun/updata/updata.sh
#!/bin/bash
ftp -n<<!
open 192.168.90.234
user root 123456
binary
hash
cd /var/ftp/pub
lcd /home/sun/updata
prompt
mput *.txt
close
bye
!
#/home/sun/updata/updata.sh可以执行成功
查看/var/spool/mail/root 发现line2 ftp:command not found
你可以在头部加上 PATH=$PATH:/bin ..... 参考技术B 你把updata.sh的内容放上来看看。我估计是环境变量的问题,脚本里有些环境变量你没设置好,所以在crontab跑的时候调用不到,导致不能正常执行。手工执行的时候你已经在当前shell的环境变量中了。追问
/home/sun/updata/updata.sh
#!/bin/bash
ftp -n<<!
open 192.168.90.234
user root 123456
binary
hash
cd /var/ftp/pub
lcd /home/sun/updata
prompt
mput *.txt
close
bye
!
先检查updata.sh的权限是否正确,crontab用户下是否有执行权限。如果权限没问题,试试
#!/bin/bash
cd /home/sun/updata
ftp -i -n 192.168.90.234/home/sun/updata/ftp.log
user root 123456
bin
hash on
cd /var/ftp/pub
prompt off
mput *.txt
bye
FTP
crontab设置输出运行日志,调试脚本时设置跑一次(或间隔足够长的时间)就好了,否则可能影响输出日志。调试好了再改回。
0 1 * * * /home/sun/updata/updata.sh 1>/home/sun/updata/run.log 2>&1
如果updata.sh还是不执行的话,看看/home/sun/updata/run.log和/home/sun/updata/ftp.log有什么错误信息。有错误信息就好定位解决了。
run.log 显示:line 3 :ftp :command not found ftp。log没有写入内容
这又是什么情况啊?
在终端里ftp 192.168.90.234 root能登录进去,并且用ftp命令能传文件
chmod +X /home/sun/updata/updata.sh
chmod -R 755 /home/sun/updata/updata.sh
没有执行权限的话可能不会执行.试下 参考技术D 你的updata.sh路径没有对,一开始先cd到真确的路径。追问
什么意思?cd到正确的路径?
updata.sh就放在/home/sun/updata下的
cronjob开始执行时的默认路径不是/home/sun/updata,一开始用cd是必须的.当然你的shell中用的是绝对路径就是另外一回事了.
追问/home/sun/updata/updata.sh
#!/bin/bash
ftp -n<<!
open 192.168.90.234
user root 123456
binary
hash
cd /var/ftp/pub
lcd /home/sun/updata
prompt
mput *.txt
close
bye
!
ftp -n<<!
改成
/usr/bin/ftp -n<<!
每两分钟执行一次
Shell脚本——crontab命令
crond是Linux系统用以周期性执行某种任务或等待处理某些事件的一个守护进程;
一、crond介绍
当完成安装操作系统,默认安装此服务工具,并自动启动crond进程;
crond进程每分钟定时检查是否有要执行的任务,若有则自动执行该任务;
1 Linux系统下的任务调度分类——系统任务调度和用户任务调度
(1)系统任务调度
系统周期性执行工作,如写缓存数据到硬盘、日志清理等;
/etc/crontab文件是系统任务调度的配置文件,文件内容如下:
其中,前四行是配置crond任务运行的环境变量,第一行SHELL变量指定系统使用哪个shell,第二行PATH变量指定系统执行命令的路径,第三行MAILTO变量指定crond任务执行信息通过电子邮件发送给哪个用户,若为空则不发送任务执行信息,第四行HOME变量指定在执行命令或脚本时使用的主目录;
(2)用户任务调度
用户定期执行工作,如用户数据备份、定时邮件提醒等;
用户可使用crontab工具定制自己的计划任务;
所有用户定义的crontab文件都保存在/var/spool/cron目录中,文件名和用户名一致;
2 crontab定时执行
(1)基本格式
crontab文件(无论是系统的还是用户的任务调度)中,每行代表一个任务,每行的每个字段代表一项设置;
格式共分为6个字段,前5个是时间设定字段,第6个是执行的命令字段,如下:
mitute hour day month week command
其中,minute表示分钟,范围0-59的整数;hour表示小时,范围0-23的整数;day表示日期,范围1-31的整数;month表示月份,范围1-12的整数;week表示星期,范围0-7的整数(0和7都表示周日);command表示要执行的命令,可以是系统命令,也可以是编写的脚本;
(2)特殊字符
* 表示所有可能的值
, 表示指定一个列表范围
- 表示一个整数范围
/ 表示指定时间的间隔频率
# 表示注释
(3)举例
# 每天21:30重启apache
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
# 每月1、10、22日的4:45重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
# 每周六、日的1:10重启apache
10 1 * * 6,7 /usr/local/etc/rc.d/lighttpd restart
# 每天18:00到23:00之间每隔30分钟重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
# 每周六的23:00重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
# 每小时重启apache
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
# 23:00到7:00之间每隔一小时重启apache
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
# 每月的4日与每周一到周三的11:00重启apache
0 11 4 * 1-3 /usr/local/etc/rc.d/lighttpd restart
# 一月一号的4:00重启apache
0 4 1 1 * /usr/local/etc/rc.d/lighttpd restart
二、cond服务
1 安装
yum install crontabs
2 操作
# 启动服务
/sbin/service crond start
# 关闭服务
/sbin/service crond stop
# 重启服务
/sbin/service crond restart
# 重新载入配置
/sbin/service crond reload
# 查看crontab服务状态
/sbin/service crond status
# 查看crontab服务是否已设置为开机启动
ntsysv
# 将crontab服务加入开机自动启动中
chkconfig -level 35 crond on
三、crontab命令
省略;
想要继续学习的可参考:http://www.jb51.net/LINUXjishu/151805.html
以上是关于crontab执行shell命令和执行php不能同时执行吗?的主要内容,如果未能解决你的问题,请参考以下文章