乐趣区

Linux(Debian)使用crontab设置定时任务

买过一些阿里云最便宜的 ECS(几百元 / 年,1GB 内存,安装 Debian),使用 Wordpress 做小企业官网
然后隔一段时间就会出现网页打不开,显示“建立数据库连接时出错”。原因是 mysql 宕机了。
一般解决的方法:

reboot
service mysql start
网友提到的在 wp_options 表 - 修复表 - 执行,修改 wp-config.php(实际都无效)

现在,就是要设置一个定时任务:每分钟检查一次 mysql 是否运行?如果没有运行,则启动。
crontab 可以设置任务,定时执行某个脚本——比如也可以定时执行一个 PHP 文件;
如果没有安装 crontab,可百度一下
step1 设置定时任务
定时任务代码
# 每隔 1 分钟执行一次 test.sh
*/1 * * * * /var/www/test.sh
上述 五个星号 按顺序依次代表:0-59 分钟,0-23 小时,1-31 某一天,1-12 某个月,0-6 Sunday=0 or 7 星期几先别管 test.sh 是啥,路径自定义

将上面代码添加到 crontab 文件
方法 1:修改 root 用户文件
打开 /etc/crontab 文件,添加上述代码,保存即可
注意:需要 root 权限
方法 2:修改普通用户文件(建议)
直接 ssh 执行命令
crontab -e
会打开 /var/spool/cron/crontabs/username 文件(如果没有 username,这个文件还是 root)
添加上述代码
按 ctrl+ X 退出,提示是否保存,按 Y,回车,会有提示:
crontab: installing new crontab
本方法的好处:会检查设置是否有错误
crontab 服务重启
/etc/init.d/cron restart

service cron restart
也有说不需要重启服务
step2 自定义任务
新建 /var/www/test.sh(我把权限设置 755),刚才的 crontab 设置就是每分钟执行这个 test.sh 的
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [$? -ne 0]
then
/etc/init.d/mysql start
else
echo “MySQL server is running .”
fi
注意,如果把 /etc/init.d/mysql start 启动数据库命令改为:service mysql start,则可能因为权限不够无法执行
到这里就设置好了
查看执行情况(crontab 执行日志)
方法 1:系统自带

执行结果不论是否成功,都会在 /var/spool/mail/mail 文件中有 crontab 执行日志的记录
另外说在 /var/log/cron.log 有,我在 Debian 中没找到

方法 2:自定义日志
新建 /var/www/mysql_start.log(我把权限设置 555)
把 test.sh 改成如下:
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [$? -ne 0]
then
echo “At time: `date`: MySQL is stop .”>> /var/www/mysql_start.log
/etc/init.d/mysql start
else
echo “MySQL server is running .”
fi
然后每分钟的执行情况,都会写入这个日志文件,

退出移动版