Linux crontab curl突然运行没成功访问

今天,在执行crontab curl时,访问不成功了,问题是之前完全没有出现过这样的情况。
首先是排查crontab是否有执行
通过命令查看定时任务是否正常执行

service crond restart

执行结果显示是正常执行的,然后进一步查看日志
发现有报错提示
curl:(6) Could not resolve host: www.baidu,cim; Unknown error

上网了解了一下,都说是DNS的问题,因此修改一下DNS配置

[root@localhost ~]# vim /etc/resolv.conf

// 原先的DNS
# Generated by NetworkManager
nameserver 8.8.8.8

// 修改后的DNS
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8

结果只是加上了nameserver 114.114.114.114就可以了,网上了解到的可能是电信DNS有调整的缘故,但是具体的原因还是不得而知。

Mysql查询某个字段包含某个值

查询字段某一字段中包含某一ID的记录我们可以用以下的方法:

首先创建表:

CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL);

添加数据:

1、 INSERT INTO users(name, limits) VALUES('小张','1,2,12');

2、 INSERT INTO users(name, limits) VALUES('小王','11,22,32');

如何查询出limits字段中含有ID=2的记录呢,我们可以用以下的方法:

第一种方法:

SELECT * FROM users WHERE limits like "%2%";

执行后您会发现两条数据都被查询了出来,而第2条数据是我们不想要的,所以我们需要对查询进行优化,考虑所有情况:

SELECT * FROM users WHERE limits like "%,2,%," or "2,%" or "%,2" or "2";

另一种方法就是利用mysql 字符串函数 find_in_set()。

第二种方法:
SELECT * FROM users WHERE find_in_set('2', limits);

这一句即可解决。。

另需注意:mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以”,”分割开。

Linux中空间不足的解决办法

在Linux的使用过程中,如果/var单独分区,但是指定的空间不大,在更新系统或者安装大型软件(如搭建Discourse论坛平台)的时候,使用到了该目录。或开启了cron定时任务时/var/spool/clientmqueue里会不停收集错误信息,长年累积下来动辄就有几十个G的空间,就可能导致提示空间不足的情况本文介绍部分解决办法。

使用软链接指向富足的空间区块

首先了解下Linux链接的概念。
链接是为某一个文件在另外一个位置建立一个不同的链接,分为硬链接和软链接。

Linux软链接:它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,命令:ln -s xxx
Linux硬链接:它会在你选定的位置上生成一个和源文件大小相同的文件,命令:ln xxx

无论是软链接还是硬链接,文件都保持同步变化。
因此,使用软链接可以将/var目录下占用空间较大的目录移动到富足的空间区块(如/home)下,使得/var下不再占用空间。
具体实现(/var/spool/clientmqueue目录为例):

mv /var/spool/clientmqueue /home  #将var下的clientmqueue目录移动到home或者其他空间富足的区块中
ln -s /home/clientmqueue /var/spool/clientmqueue  #/var/spool/clientmqueue 指向/home/clientmqueue,这样clientmqueue目录将不再占用/var目录的空间

Linux系统/var/spool/clientmqueue目录下存在大量文件的原因及解决方法

问题现象:linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件。原因分析:

系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

解决办法:
1、 将crontab里面的命令后面加上 > /dev/null 2>&1
例:
4 3 * * * /usr/bin/w > /dev/null 2>&1
2、知识点:
2>:重定向错误。
2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到/dev/null,即抛弃,同时,把产生的错误也抛弃。
3、清除/var/spool/clientmqueue/目录下的文件:
cd /var/spool/clientmqueue
rm -rf *
如果文件太多,占用空间太大,用上面命令删除慢的话,就执行下面的命令:
cd /var/spool/clientmqueue
ls | xargs rm -f