Linux crontab命令

Linux crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令,crontab命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

而Linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信件,这些工作可由每个用户自行设置。

语法
crontab [ -u user ] file

crontab [ -u user ] { -l | -r | -e }

命令说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表;
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他人的时程表,如果不使用 -u user 的话,就表示设定自己的时程表。

参数说明:
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是vi,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变量来指定使用那个文字编辑器(比如 setenv VISUAL joe);
-r : 删除目前的时程表;
-l : 列出目前的时程表。

时程表的格式如下:
f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天,program 表示要执行的程序;
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行 program,以此类推;
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 小时到第 b 小时都要执行,以此类推;
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,以此类推;
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,以此类推。

使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定时程表。

实例:

#每月每天每小时的第 0 分钟执行一次 /bin/ls
 0 * * * * /bin/ls

#在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
 0 6-12/3 * 12 * /usr/bin/backup

#周一到周五每天下午 5:00 寄一封信给 ken@01h.net
 0 17 * * 1-5 mail -s "hi" ken@01h.net < /tmp/maildata

#每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo "heihei"
 20 0-23/2 * * * echo "heihei"

再看看几个具体的例子:

0 */2 * * * /sbin/service httpd restart  #意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start  #意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop  #意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home  #每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup  #每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  #每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件
30 6 */10 * * ls  #意思是每月的1、11、21、31日是的6:30执行一次ls命令

注意:当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

MySQL将utf8字符集升级到utf8mb4以兼容生僻字

先确认当前MySQL版本,MySQL在5.5.3之后才增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode,好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。

select version();

修改MySQL数据库配置文件:

[client]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

[mysql]
default-character-set = utf8mb4

重启MySQL后查看修改结果:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

使用示例:

--修改数据库字符集
ALTER DATABASE `test` CHARACTER SET = utf8mb4;

--修改表字符集
ALTER TABLE `test` convert to CHARACTER SET utf8mb4;

--修改字段字符集
ALTER TABLE `test` CHANGE COLUMN `name` `name` varchar(12) CHARACTER SET utf8mb4;

Apache设置允许跨域

1、首先找到 Apache 配置文件 httpd.conf ,开启 Apache 头信息自定义模块:

LoadModule headers_module modules/mod_headers.so

把以上这一行的#注释符去掉(也有可能已经默认去掉了)

2、找到对应的虚拟主机配置文件,也就是需要被跨域的网站所对应的主机配置文件,具体内容示例如下:

<VirtualHost *:80>
DocumentRoot /www/web/ken_01h_net/public_html
ServerName ken.01h.net
</VirtualHost>
<Directory /www/web/ken_01h_net>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

添加一行: Header set Access-Control-Allow-Origin *

<VirtualHost *:80>
DocumentRoot /www/web/ken_01h_net/public_html
ServerName ken.01h.net
</VirtualHost>
<Directory /www/web/ken_01h_net>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    Header set Access-Control-Allow-Origin * #对所有域名开放
    #Header set Access-Control-Allow-Origin http://www.01h.net #对指定域名开放
</Directory>

Linux下查看日志信息的常用命令

按行号条件显示需要的行:

cat /www/wdlinux/apache/logs/error_log-20190720 | tail -n 30
# 查看Apache错误日志文件末尾的30行
cat /www/wdlinux/apache/logs/error_log-20190720 | head -n 30
# 查看Apache错误日志文件开头的30行
cat /www/wdlinux/apache/logs/error_log-20190720 | tail -n +30
# 从第30行开始显示,显示第30行以后的所有行
cat /www/wdlinux/apache/logs/error_log-20190720 | head -n 100 | tail -n +70
# 取前面的100行,再取第70行以后的所有行,合起来就显示第70行到第100行之间的行

按字符串条件查找相关的行:

cat /www/wdlinux/apache/logs/error_log-20190720 | grep 'PHP Parse error' -A 2
# 在error_log-20190720文件中,查找“PHP Parse error”字符,并显示“PHP Parse error”所在行及之后2行(总共显示3行),A:after
cat /www/wdlinux/apache/logs/error_log-20190720 | grep 'PHP Parse error' -B 2
# 显示“PHP Parse error”所在行及之前2行(总共显示3行),B:before
cat /www/wdlinux/apache/logs/error_log-20190720 | grep 'PHP Parse error' -C 2
# 显示“PHP Parse error”所在行及前后2行(总共显示5行),C:center
cat /www/wdlinux/apache/logs/error_log-20190720 | grep -v 'PHP Notice'
# 排除含有“PHP Notice”的行以外的所有行
cat /www/wdlinux/apache/logs/error_log-20190720 | grep -v 'PHP Notice' | grep -v 'PHP Warning'
# 排除多个条件

less方法:

less /www/wdlinux/apache/logs/error_log-20190720

与 vi 编辑器类似,用“/”搜索所需内容:

/serchContent – 使用一个模式进行搜索,并定位到下一个匹配的文本
n – 向前查找下一个匹配的文本
N – 向后查找前一个匹配的文本

Linux下安装php扩展(以yaml为例)

下载yaml安装包、解压:

wget http://pyyaml.org/download/libyaml/yaml-0.2.2.tar.gz
tar -xvzf yaml-0.2.2.tar.gz

执行 phpize 命令,生成 configure , phpize 路径请自行find :

cd yaml-0.2.2
/www/wdlinux/php/bin/phpize

执行配置,编译安装,php-config 路径请自行find :

./configure --with-php-config=/www/wdlinux/php/bin/php-config
make
make install

编译成功之后就会生成 .so 文件,并显示 .so 文件的路径,比如我这里是:

find /www/wdlinux/ -name yaml.so
/www/wdlinux/apache_php-5.5.38/lib/php/extensions/no-debug-non-zts-20121212/yaml.so

最后把 .so 文件加入 php.ini 配置中:

vi /www/wdlinux/etc/php.ini
# 文件末尾添加如下代码
[yaml]
extension_dir =/www/wdlinux/apache_php-5.5.38/lib/php/extensions/no-debug-non-zts-20121212
extension=yaml.so

保存退出,重启web服务,用 phpinfo() 检查一下是否安装成功: