定时任务脚本是:
cd /data/blogs/source/_posts/ && git pull origin master && npx hexo cl && npx hexo g
这个命令可以在命令行中可以正常执行。
但是配置到定时任务中:
通过
crontab -e
添加一条记录。
15,36,55 * * * * cd /data/blogs/source/_posts/ && git pull origin master && npx hexo cl && npx hexo g
查看定时任务的执行日志:tail -f /var/log/cron,只有如下信息
Aug 28 19:54:01 blogs crond[979]: (root) RELOAD (/var/spool/cron/root)
Aug 28 19:55:01 blogs CROND[6899]: (root) CMD (cd /data/blogs/source/_posts/ && git pull origin master && npx hexo cl && npx hexo g )
有日志,但是这个命令没有执行。请问为什么没有执行,如何解决这个问题?
检查一下脚本的绝对路径和脚本的名称,crontab -e 里的 15,36,40 * * * * /bin/bash /data/blogs/update.sh 和实际是否相符。
例如:20点的 41,43,45 执行脚本
每15分钟执行一次脚本:
*/15 * * * * /bin/bash /data/blogs/update.sh ,然后看 /var/spool/mail/root这个文件的输出就可以看到脚本到底执行了哪些,输出有哪些。
这个问题我超级熟悉,首先看日志/var/log/message 看看具体是什么报错。
其次,那一串命令最好写到一个脚本里,脚本内定义pwd变量什么的,先执行一次脚本,看能否正常执行。
最后,脚本内增加测试输出语句,比如,touch一个文件。
然后,定时任务执行这个脚本,如果顺利看到touch的文件,表示定时任务成功。
晚点给你写这个脚本,手机打字,太麻烦,等我用电脑。
编写脚本,脚本内容如下:
#!/bin/bash
#author zsk_john
PWD=/data/blogs/source/_posts/
cd $PWD
git pull origin maste
echo "第一步执行完成"
npx hexo cl
echo "第二步执行完成"
npx hexo
echo '"第三步执行完成"
然后执行这个脚本,看这三个echo可以正常执行吗?我怀疑你判断脚本是否正常执行没有做。
cat /var/log/messages 查看这个日志文件,可以看到crontab的执行情况。
都没输出echo,当然是脚本不对啦,三个命令单独执行,肯定是执行不了的,并且一般不&后台运行的。