在FreeBSD5.4下面做开发,需要定期备份mysql数据,开始在网上找了bash的脚本,但是执行无效,一怒之下,使用php来写,嘿嘿,其实php写脚本也不错滴。备份其实就是把mysql的数据库文件复制出来,当然,也可以使用mysqldump之类的工具把结果生成sql语句,不过我为了方便,就直接复制文件,并且压缩一下。看php代码:

#!/usr/local/php/bin/php
<?
$date = "mysql_". date("Ymd_His");
$cmd = "sudo /usr/bin/tar -cf /home/heiyeluren/db_dump/".$date.".tgz /usr/local/mysql/var/";
system($cmd);
?>

把脚本保存到 /home/heiyeluren/db_dump/mysql_dump.php。
上面的代码很好理解吧,就是生成一个按照时间为名字的.tgz文件,保存在我的个人主目录下面,为了脚本能够执行,还要加上 chmod +x /home/heiyeluren/db_dump/mysql_dump.php ,让脚本能够有执行权限。我们自己先试验一次这个脚本,看有效没有:
/home/heiyeluren/db_dump/mysql_dump.php
在看看有没有生成文件:
ls /home/heiyeluren/db_dump/
嗯,生成了 mysql_20051206_xxxxx.tgz的文件,证明有效果。

好,切换到root用户:su - root,输入密码,添加cron任务:

crontab -e

加入任务:

*/1 * * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null

嘿嘿,设定了一分钟执行一次,设这么快,主要是看看有没有效果。

等了两分钟,看了一下,嗯?怎么在 /home/heiyeluren/db_dump/下面还是没有 .tgz 的文件?怎么回事呢?

查看cron的日志:

cat /var/log/cron

刷刷列了好几屏幕,看到类似这样的:
Dec 6 19:32:00 BSD /usr/sbin/cron[12256]: (root) CMD (/usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null)

证明我的脚本执行了。。。但是为什么没有效果呢?
哦,我想起来了,好像cron能够把脚本中的输出当作邮件发送给创建cron的用户,嗯,好,我们去掉 > /dev/null 这段,就让我们cron直接发送邮件给我们的root:
crontab -e
修改为:
*/1 * * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php
等了一会,看一下邮件,可以使用mail命令来看,也可以直接在 /var/spool/clientmqueue/ 下面看,我们选择第二种:
ls /var/spool/clientmqueue/
列出好多文件:
dfjB6BG0SE012107 dfjB6BN0JP012185 
dfjB6BU1mj012248 qfjB6BG0SE012107 
qfjB6BN0JP012185 qfjB6BU1mj012248
dfjB6BH0aP012123 dfjB6BO1ID012192 
dfjB6BV0dL012254 qfjB6BH0aP012123 
qfjB6BO1ID012192 qfjB6BV0dL012254
我们打开一个来看:
cat /var/spool/clientmqueue/dfjB6BG0SE012107
嗯,看到输出:
sudo: not found
???难道是我们的php脚本有问题,不是我测试过没有问题的吗?哦,看提示,原来是sudo命令没有找到,为什么呢?因为所有脚本中引用的程序都必须是绝对路径滴,不然会找不到,唉,犯错了。

嗯,既然我是用root执行的,权限是没有问题滴,何不把sudo给删除呢,说干就干,修改脚本:
vi /home/heiyeluren/db_dump/mysql_dump.php
修改为:

#!/usr/local/php/bin/php
<?
$date = "mysql_". date("Ymd_His");
$cmd = "/usr/bin/tar -cf /home/heiyeluren/db_dump/".$date.".tgz /usr/local/mysql/var/";
system($cmd);
?>

嘿嘿,去掉了sodu,嗯,保存退出,看看我们的crontab效果如何。。。

哈哈,一分钟过后,查看下目录:
ls /home/heiyeluren/db_dump
嘿嘿,有两个 .tgz 的文件了:mysql_20051206_xxxx.tgz,嗯,证明成功了,但是不能总是让cron给root发邮件呀,不然一会功夫服务器空间就没有了,修改cron任务为:
0 6 * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null
就是每天早上的六点执行一次,并且把任何输出到输出到 /dev/null 中,不要给root发邮件。

好,终于解决,不容易,涉及很多知识电,不过增长了经验,不是吗?

解决cron不执行的问题的更多相关文章

  1. Linux 通过cron定期执行 php文件(转)

    Linux 通过cron定期执行 php文件 补充几点: 1. 要在php文件头加上解释器的路径,通常是 #!/usr/bin/php 2. 授予要执行的php文件执行权限   chmod a+x x ...

  2. 解决SSH远程执行命令找不到环境变量的问题

    通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同, ...

  3. 记一次解决cmd中执行java提示"找不到或无法加载主类"的问题

    今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”.现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和clas ...

  4. 脚本手动执行正常,放cron中执行有问题的原因

    问题原因:   1. crond服务没启动   2. 环境变量如 PATH LANG SHELL 等设置不对   3. 脚本中引用的文件地址是相对路径,而非绝对路径.   排查步骤:  以 check ...

  5. Ubuntu 解决:当执行`sudo apt-get update`命令时 出现的 “apt-get 404 Not Found Package Repository Errors” 问题

    Ubuntu 解决:当执行sudo apt-get update或者sudo apt-get install命令是出现的 "apt-get 404 Not Found Package Rep ...

  6. .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件

    常用的定时任务组件有 Quartz.Net 和 Hangfire 两种,这两种是使用人数比较多的定时任务组件,个人以前也是使用的 Hangfire ,慢慢的发现自己想要的其实只是一个能够根据 Cron ...

  7. .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件 (Timer 优化版)

    在上个月写过一篇 .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件 的文章,当时 CronSchedule 的实现是使用了,每个服务都独立进入到一个 while 循环中,进行定期扫描是否 ...

  8. PHP脚本命令行执行成功,CRON无法执行故障解决记录

    先来看看一个最简单的PHP文件(ip.php) <?php $myip = get_ip_cmd(); echo($myip); // get ip address function get_i ...

  9. centos cron 自动执行脚本异常 命令不生效的解决办法

    办法: 1.sh脚本加入 source /etc/profile 2.非系统命令,要写绝对路径

随机推荐

  1. CSS-百分百布局

    1.照片随着大小变化: 这里面重点就是每个包裹盒子是25%,图片是100%显示: <div class="box2"> <p> //这里都是4个: < ...

  2. Vue中,过滤器的使用方法!

    Vue.js允许自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和v-bind表达式.过滤器应该被添加在JavaScript表达式的尾部,由“管道”符号指示:(借官方的 ...

  3. ECharts模拟百度迁徙实例

    本实例原始信息: 作者:anix 演示地址:Echarts模拟迁徙 源码地址:GitHub-ananix-qianxi 前言 "百度地图春节人口迁徙大数据"(简称"百度迁 ...

  4. 【版本控制工具】 Git基础

    一.Git简介 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.于是Git 成了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. (Git目前使用率非常 ...

  5. 记一次生产环境presto删表失败的问题

    场景,开发用java程序连接presto创建一个表,这个表在hdfs的权限为: 然后用presto去删除这个表 报错,没有权限删除,查看上一级目录权限,发现权限正常 直连hive删表 发现正常. 然后 ...

  6. Elasticsearch 7.4.0官方文档操作

    官方文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.0.0 设置Elasticsea ...

  7. idea逆向生成hibernate工程

    1.创建maven工程 2.在resources下创建hibernate.cfg.xml文件 <?xml version='1.0' encoding='utf-8'?> <!DOC ...

  8. zookeeper+activemq高可用集群搭建

    一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...

  9. deep_learning_Function_bath_normalization()

    关于归一化的讲解的博客——[深度学习]Batch Normalization(批归一化) tensorflow实现代码在这个博客——[超分辨率]TensorFlow中批归一化的实现——tf.layer ...

  10. 黑客正在使用美国NSA泄露的工具进行挖矿

    早些年我们知道美国国家安全局囤积不少漏洞准备自己使用,结果这些漏洞以及利用工具被方程式组织获得. 随后名为影子经纪人的黑客组织获得这些漏洞和工具后又再次出售,当初的永恒之蓝漏洞就是从这里泄露的. 永恒 ...