在配置ecstore的crontab,前前后后折腾了将近两天,度娘了无数次,从等待执行到正在导出,一直没有成功过,其他有修改权限,更换账号,都没有成功,最后去看了处理导出的文档,才知道问题出在源码上面,真的是太迷信源码无错误了,下面把我个人的一些配置流程整理下:
1、配置linux的ftp,不会的请点击这里跳转。
2、配置好ftp后,测试linux环境的cron是否能被正常执行,从root用户开始
#root身份登陆
crontab -uroot -e
#输入:每隔一分钟向test文件写入当前时间,保存退出
*/1 * * * * date>>~/test
#重启cron服务
service crond restart
#监视cron日志
tail -f /var/log/cron
#监视test变化
tail -f ~/test
如不能执行,确认cron服务是否安装和启动,具体方法就不多说了,自行找度娘吧。
3、确认 www 或者apache 用户可正常执行计划任务(自己新建一个账户用来操作也行,如果是新建账户,记得修改apache的配置文件,将李某的User和Group换成新建的账户和组,一般新建账户的时候组和账户是一样的名称,不会操作的可以点击这里)
#root身份登陆
crontab -uwww -e
#输入:每隔一分钟向test文件写入当前时间,保存退出
*/1 * * * * date>>~/test
#重启cron服务
service crond restart
#监视cron日志
tail -f /var/log/cron
#监视test变化
tail -f /home/www/test
注意:/home/www是新增用户设置的目录,如果www用户没有载入环境变量,命令前要加“. /etc/profile;/bin/sh”,即:. /etc/profile;/bin/sh date>>~/test。
4、修改www的用户配置, www用户的主目录默认为/dev/null,我这里改为/home/www,并赋于www用户读写权限。
赋于www用户读写权限
赋予root权限
方法:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
修改完毕,现在可以用tommy帐号登录,然后用命令 su - ,即可获得root权限进行操作。
#更改用户主目录(执行前先确认www用户的UID,cat /etc/passwd)#需要先停止WEB服务,否则会提示www用户已登陆(usermod: user www is currently logged in)
usermod -d /home/www -u 1000 www
#启动web服务器,重新偿试第3步
5、修改www用户的任务配置文件(配置文件以用户名命名存放在 /var/spool/cron)
root权限下执行以下命令:crontab -u www -e
* * * * * /data/html/ecstore/script/queue/queue.sh /usr/bin/php >/dev/null
* * * * * /usr/bin/php data/html/ecstore/script/crontab/crontab.php >/dev/null
#重启cron服务,service crond restart
注:"www" 为web用户。
"/data/html/ecstore" 为ecstore的安装路径。
队列需要"proc_open"方法支持,如果队列全部阻塞,请检查服务器是否支持该方法。
"crontab.php"是php文件,写法是符合linux bash脚本语法的,如果没有配置php环境变量,需要用php应用程序(PHP_PATH\bin\php)来执行该文件。
注:当你用 tail -f /var/log/cron 发现任务在重复执行时,使用 ps aux |grep cron* 查看是有多个cron进程,如果有kill掉就可以了
基本完工,就这么多了。在此之前,最好先以root手工执行/data/html/ecstore/script/queue/queue.sh,查看是否成功。