如何查看已安装的CentOS版本信息

如何查看已安装的CentOS版本信息

1)[root@localhost ~]# cat /proc/version

Linux version 2.6.18-194.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Fri Apr 2 14:58:14 EDT 2010

2)

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

3)

[root@localhost ~]# uname -r

2.6.18-194.el5

2. 查看linux版本:

1) 列出所有版本信息,

[root@localhost ~]# lsb_release -a

LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: CentOS

Description:    CentOS release 5.5 (Final)

Release:        5.5

Codename:      Final

注:这个命令适用于所有的linux,包括RedHatSUSE、Debian等发行版。

2) 执行cat /etc/issue,例如如下:

[root@localhost ~]# cat /etc/issue

CentOS release 5.5 (Final)

Kernel r on an m

3) 执行cat /etc/redhat-release ,例如如下:

[root@localhost ~]# cat /etc/redhat-release

CentOS release 5.5 (Final)

查看系统是64位还是32位:

1、getconf LONG_BIT or getconf WORD_BIT

[root@localhost ~]# getconf LONG_BIT

64

2、file /bin/ls

[root@localhost ~]# file /bin/ls

/bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

3、lsb_release  -a

[root@localhost ~]# lsb_release -a

LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: CentOS

Description:    CentOS release 5.5 (Final)

Release:        5.5

Codename:      Final

4、或者是使用查看文件的方法。

vim /ect/issue

更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-12/110748.htm

LNMP 1.4教程及注意事项和多PHP版本使用教程

LNMP 1.x版本基本都可以正常升级到1.4使用1.4的管理脚本和新的功能。

升级管理脚本:wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./upgrade1.x-1.4.sh
有些功能是需要另外升级nginx、php版本或安装多php版本的,下面会进行单独的说明。

新的功能主要是两个添加SSL和多PHP版本选择。

添加SSL:

添加SSL有两种方式可以选择,1是自备证书和key,这个不需要多说,按提示分别填写上证书和key的完整路径和名称。2是使用Let’sEncrypt生成3个月有效期的SSL证书,另外按提示一个邮箱就可以。

已经添加过改域名的http站点,添加https站点直接运行:lnmp ssl add 按提示添加,可以参考新添加教程的提示说明。

新添加虚拟主机按:https://lnmp.org/faq/lnmp-vhost-add-howto.html

注意1:添加的SSL虚拟主机是默认http2的,如果是之前的版本未使用openssl 1.0.2进行编译或者Nginx低于1.9的话,建议升级到1.12.0,使用升级脚本:./upgrade.sh nginx 进行升级。
注意2:如果是对已有主机添加SSL,因为之前的1.3版本默认LNMP的虚拟主机里是禁止 . 开头的隐藏文件及目录的,所以访问http://abc.com/.well-known/acme-challenge/**** 这个链接的话返回403错误,所以必须要将对应虚拟主机配置文件里的
location ~ /\.
{
deny all;
}
这段配置删掉或注释掉或在这段配置前面加上
location ~ /.well-known {
allow all;
}
修改保存后重启nginx。
注意3:https网站里面的js、css、图片等资源的引用必须是https的,如果是http的会提示不安全也没有小绿锁。需要自行修改网站模板、网站内容里的图片等为https连接或者直接使用相对路径引用。

多PHP版本使用教程:
多PHP版本只支持LNMP模式,LNMPA、LAMP模式下不支持!
要使用多PHP先安装多PHP版本,在lnmp1.4源码目录下运行:./install.sh mphp 按提示选择要另外安装的PHP版本,不能多选,只能选一个,要安装多个需要安装完成后再运行前面的安装命令。
已经升级完LNMP管理脚本且已安装好多PHP版本的话,lnmp vhost add 时会在设置完日志名称后提示当前已经存在的PHP版本,按提示的数字选择就可以。

如果已经存在的虚拟主机要更改PHP为指定版本需要修改虚拟主机的配置文件,配置文件为 /usr/local/nginx/conf/vhost/域名.conf ,将里面的include enable-php.conf; 替换为 include enable-php7.1.conf; 前面的7.1为php版本,可以根据自己的需要进行修改,但必须要对应的多php版本已经安装,要不然会提示502错误。

修改后必须要重启nginx,否则无法生效。

如要使用新版里面的PHP模块组件安装工具需要升级一下PHP才能使用新版PHP组件安装工具。

多PHP版本PHP模块/组件
多PHP模块安装依然和以前一样只不过存在多PHP版本时会让你选择为哪个版本的PHP安装PHP模块/组件,教程参考:https://lnmp.org/faq/addons.html

 

https://lnmp.org/faq/upgrade1-4.html

crontab从入门到出坑

此篇技术博文主要介绍的是crontab,Linux下的计划任务管理工具。涉及内容包括crontab使用配置、常见坑的分析和编者总结的错误调试方法。非标题党文章,真正地帮您从入门到出坑。

category.png

我的理解,后台任务通常分为两种:常驻和定时。之前的文章《pm2进程管理工具使用总结》主要针对的是常驻任务。今天来谈谈crontab,主要针对的是定时任务。

实验环境:centos7

介绍crontab

crontab的服务进程名为crond,英文意为周期任务。顾名思义,crontab在Linux主要用于周期定时任务管理。通常安装操作系统后,默认已启动crond服务。crontab可理解为cron_table,表示cron的任务列表。类似crontab的工具还有at和anacrontab,但具体使用场景不同,可参见附录《让你学会Linux计划任务》一文了解更多。

关于crontab的用途很多,如

  • 定时系统检测;
  • 定时数据采集;
  • 定时日志备份;
  • 定时更新数据缓存;
  • 定时生成报表;

    等等任务

当然,更多使用场景是要以视具体情况而定了。毕竟是工具通常都是常用规则总结而成的产物。

确认crond服务已经安装与开启之后,下面开始具体说明

简单示例

先来个简单示例体验一下。

  • 目标:每分钟向/tmp/time.txt文件下写入当前时间
  • 新建crontab任务
    $ crontab -e      // 打开crontab任务编辑
    * * * * * date >> /tmp/time.txt
  • 静静等待几分钟
    $ cat /tmp/time.txt
    Do 29. Dez 22:45:01 CST 2016
    Do 29. Dez 22:46:01 CST 2016
    Do 29. Dez 22:47:01 CST 2016
  • 从上面结果看出,每分钟执行了date并写入到/tmp/time.txt。

简单示例演示成功。下面从细节深入说明crontab使用。

使用选项

上面的实验中使用了crontab命令的-e选项。我们来看看crontab命令中有哪些选项?

  • -e 选项 表示打开当前用户的crontab任务列表配置文件。当然也可以直接打开,路径通常是在/var/spool/cron/下,文件以用户名命名,如/var/spool/cron/root。不过,采用-e方式打开,福利是可以帮助我们自动检查任务配置符合规则。
  • -u 选项 指定某用户的任务列表,很好理解。比如我当前是root用户,想操作poloxue用户的任务列表。如下:
    $ crontab -u poloxue -e
  • -l 选项 列出某用户的所有任务列表
  • -r 选项 删除某用户的所有任务列表,这个选项使用小心为上,估计也只是自己实验时玩玩而已,正常不使用。

crontab命令的选项中,主要使用的就是以上几个,理解比较简单。

任务配置

说完了crontab的命令选项,下面开始真正的大戏,任务列表文件如何配置?

首先,看下crontab任务列表配置格式,示例文件如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 更多细节 man 4 crontabs

# 计划任务定义的例子:
# .---------------- 分 (0 - 59)
# |  .------------- 时 (0 - 23)
# |  |  .---------- 日 (1 - 31)
# |  |  |  .------- 月 (1 - 12)
# |  |  |  |  .---- 星期 (0 - 7) (星期日可为0或7)
# |  |  |  |  |
# *  *  *  *  * 执行的命令
* * * * * date >> /time.txt 2>&1

从上面的示例文件可看出,crontab的任务列表主要由两部分组成:环境变量配置与定时任务配置。可能大家在工作中更多是只用到了任务配置部分。

环境变量配置部分

理解环境变量配置这部分可以帮助我们减少去踩一些不必要的坑。简单说明上面涉及的环境变量。

  • SHELL为/bin/bash,表示使用/bin/bash解释执行命令
  • PATH表示到哪些目录路径寻找命令程序,此环境变量的值说明了为什么我们在crontab中执行命令时,尽量要写命令全路径才能执行的原因。
  • MAILTO变量作用是当任务执行有输出时,内容发送到哪个用户的邮箱。禁用可以设置MAILTO=””。

当我们在使用crontab时,发现某些定时任务不能顺利执行,但shell控制台执行成功,环境变量是否正确是我们需要首先关注的点之一。具体详情可以看后面关于环境变量坑的说明。

定时任务配置部分

这部分是crontab配置核心。

  • 基本配置
    如下所示配置共6列,前5列是关于执行时间配置,最后1列是具体执行命令。

    .---------------- 分 (0 - 59)
    |  .------------- 时 (0 - 23)
    |  |  .---------- 日 (1 - 31)
    |  |  |  .------- 月 (1 - 12)
    |  |  |  |  .---- 星期 (0 - 6) (星期日可为0或7)
    |  |  |  |  |
    *  *  *  *  * 执行的命令

    第一列单位为分,表示每时第几分钟,范围为0-59;
    第二列单位为时,表示每天第几小时,范围为0-23;
    第三列单位为日,表示每月第几天,范围为1-31;
    第四列单位为月,表示每年第几月,范围为1-12;
    第五列单位为星期,表示每星期第几天,范围0-7,0与7表示星期日,其他分别为星期1-6;

  • 时间配置段类型
    根据时间列中值的不同设置方式,编者总结出以下五种类型:

    固定某值,指定固定值,如指定1月1日0时0分执行任务

    0 0 1 1 * command

    月日时分都指定了固定数值。

    <font color=red>注:*在crontab中表示任意值都满足条件。</font>

    列表值,时间值是一个列表,如指定一个月内2、12、22日零时执行任务

    0 0 2,12,22 * * command

    上述日指定多个值,2号、12号和22号,以逗号分隔;

    连续范围值,时间为连续范围的值,如指定每个月1至7号零时执行任务

    0 0 1-7 * * command

    上述日期为连续范围的值1-7时

    步长值,根据指定数值跳跃步长确定执行时间,如指定凌晨1时开始每割3个小时0分执行一次任务

    0 1-24/3 * * * command

    上述指定从凌晨1时每3个小时执行任务,如1点0分,4点0分,7点0分等。

    混合值,支持以上类型的组合,如指定每小时0至10分,22、33分以及0-60分钟每隔20分钟执行任务,如下

    0-10,22,33,*/20 * * * * command

    这里的分钟值采取了多种类型组合指定,包括连续范围值(0-7),列表值(22,33),步长值(*/20)。

    <font color=red>声明:这几种时间配置类型是编者自己总结,希望能帮助大家更好理解。有错误帮忙指出。</font>

定时语句解析工具

通常在使用crontab添加任务时,我们会依靠自己已有知识编写定时语句。当需要测试语句是否正确时,总需要一定时间等待证明其正确性。作为一名牛逼的程序员,这种方式就太不酷了。有没有一款工具,只要我们给出语句,其就能告诉具体执行时间呢?下面介绍一款老外开发的crontab在线解析工具。

工具地址:https://crontab.guru

下面是这个工具的截图

crontab_tool.png

从上面看出,我们输入的语句解析结果为每天的04:05执行任务。下面有这样一行文字“next at 2016-12-31 04:05:00”,告诉了我们最近一次的执行时间。

<font color=red>注明:百度搜索“crontab在线解析”获得的工具有坑,某些语句解析结果错误。为避免大家受骗,这里提供具体地址:http://tool.lu/crontab/</font>

使用有坑

crontab使用中常会遇到各种坑。下面列出编者在使用中曾遇到的一些问题。

时间配置误区

此处介绍两种坑,一种是由于基本功不足导致配置错误,而另一种则是多数人对crontab配置都存在的一个理解误区。

  • 整点时间设置错误
    其实这个错误不用单独说明,但是编者刚开始接触crontab时犯过,单独拿出来说明一下。

    如设定每天3点执行一次某任务
    下面列出错误方式,当我们听到每天3点执行一次某任务时,很多人会把重点放在3点,而忽略了执行一次的需求。

    下面是个错误的例子

    * 3 * * * command

    这里会导致在三点的每分钟都会执行一次任务,也就是执行了60次。
    正确方式如下,每天3点0时执行任务

    0 3 * * * command
  • 日与星期的关系误区
    这真的是个大误区,很多人都不知道的大误区。直接开始说明吧。

    好,首先做两个练习

    设置任务一:每月的1-7每天零时执行某任务,答案如下:

    0 0 1-7 * * date >> /tmp/date.txt

    设置任务二:每星期的星期一零时执行某任务,答案如下:

    0 0 * * 1 date >> /tmp/date.txt

    上面两个任务的设定都是正确的。
    下面提出第三个任务,设置每个月的第一个星期一零时执行某任务
    分解任务要求,首先,第一个星期就是每个月的1-7日,而星期一就是星期一。所以我们理解的crontab任务配置如下

    0 0 1-7 * 1 date >> /tmp/date.txt

    下面直接使用前面介绍的在线解析工具分析此语句,如下

    crontab_time.png

    解析结果显示语句执行时间为每月的1至7日和每星期一。可以看到最近执行时间是“next at 2017-01-01 00:00:00”,这个时间也并非星期一。

    这是crontab的一个特别容易误解之处,下面直接给出结论:

    当日和星期任一列包含时,日与星期两者为并且的关系;
    当日和星期列中不包含
    时,日与星期两者为或者的关系;

<font color=red>请注意,前面提到的那个百度搜索出来的工具分析结果显示的确是每月第一个星期一,这是错误的。如有朋友持怀疑态度,可自行验证,如有错误,随时告知。</font>

环境变量问题

当我们刚使用crontab时,有人会告知所有命令尽量都使用绝对路径,以防错误。为什么?这就和我们下面要谈的环境变量有关了。

  • 首先,获取控制台环境变量看下
    $ env
    XDG_SESSION_ID=10
    HOSTNAME=localhost.localdomain
    SHELL=/bin/bash
    PERL_MB_OPT=--install_base /root/perl5
    USER=root
    MAIL=/var/spool/mail/root
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php5/bin
    PWD=/var/mail
    SHLVL=1
    HOME=/root
    LOGNAME=root
    XDG_RUNTIME_DIR=/run/user/0
    _=/usr/bin/env

    <font color=red>考虑篇幅,输出有删减。</font>

  • 然后,获取crontab环境变量信息
    * * * * * /usr/bin/env > /tmp/env.txt

    输出结果,如下

    $ cat /tmp/env.txt
    XDG_SESSION_ID=732
    SHELL=/bin/sh
    USER=root
    PATH=/usr/bin:/bin
    PWD=/root
    LANG=de_DE.UTF-8
    SHLVL=1
    HOME=/root
    LOGNAME=root
    XDG_RUNTIME_DIR=/run/user/0
    _=/usr/bin/en
  • 对比分析两者输出
    对比crontab与控制台输出,我们发现两者的环境变量差异很大。如果命令在控制台执行成功,而在crontab执行失败,我们需要考虑是否命令涉及的环境变量在crontab和控制台间存在差异。
  • 明白crontab使用绝对路径执行命令原因了吗?
    我们知道命令默认查找路径是由PATH指定的。

    从上面输出结果可知,控制台的PATH值为

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php/bin

    crontab的PATH值为

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php/bin

    crontab的PATH值为

    PATH=/usr/bin:/bin

    /usr/local/php/bin/下面存在php命令,在控制台执行成功

    $ php index.php

    因在crontab的PATH变量无/usr/local/php/bin/,其执行php命令则会失败。

  • 解决方式
    已知哪个环境变量导致问题,可以直接在crontab配置中加入变量配置。
    不知哪个环境变量导致问题,终极大招是引入控制台环境变量,如下

    * * * * * source /$HOME/.bash_profile && command

    当然,对于某特定环境变量或有特定的处理方式,如PATH,命令使用绝对路径亦可解决。

特殊符号%

%在crontab是特殊符号,具体含义如下:

  • 第一个%表示标准输入的开始
    * * * * * cat >> /tmp/cat.txt 2>&1 % stdin input

    执行成功之后,查看/tmp/cat.txt

    $ cat /tmp/cat.txt
    stdin input

    我们看到标准输入写入到了/tmp/cat.txt文件。

    <font color=red>理解上面示例,首先需知cat >> /tmp/cat.txt ,作用是将标准输入重定向至/tmp/cat.txt。</font>

  • 其余%表示换行符

    示例如下

    * * * * * cat >> /tmp/cat_line.txt 2>&1 % stdin input 1 % stdin input 2 % stdin input 3

    查看输出

    $ cat /tmp/cat_line.txt
    stdin input 1
    stdin input 2
    stdin input 3

    有三行输出

  • 解决方式

    既然是特殊字符,自然而然就想到了使用\进行转义,如下:

    * * * * * cat >> /tmp/cat_special.txt 2>&1 % per cent is \%. 2>&1

    查看输出

    $ cat /tmp/cat_special.txt
    per cent is %.

    执行成功了。自此,你就顺利爬出了%特殊字符问题的坑。

关于这个问题的具体说明,可以参看附录中的《Crontab and %》。

关于输出重定向

当我们不做输出重定向时,如任务有大量输出,或许有些无法解释的问题。

  • 输出写入邮件
    crontab任务输出默认写入到执行用户的邮件中,如下演示:

    * * * * * date

    命令输出当前日期,下面查看当前用户的邮件

    $ cat /var/spool/mail/$USER
    ...
    
    Sat Dec 31 17:45:01 CST 2016

    由此可见,任务输出的日期信息写入到了用户邮件中。

    如任务有大量输出,会占用磁盘资源。但编者测试显示,如磁盘容量不足,任务也会执行,但输出不会写入邮件;

  • 关闭邮件功能
    如何关闭?设置MAILTO环境变量为空。如下

    MAILTO=""
    * * * * * date

    是不是关闭邮件写入就好了?附录《Linux中的crontab与sendmail》博文表明,关闭mail功能,输出内容将写入到/var/spool/clientmqueue中,可能占满分区的inode资源,导致任务无法执行。inode资源使用情况可通过如下命令获取

    $ df -i
    Filesystem Inodes   IUsed  IFree    IUse% Mounted on
    /dev/sda1  512000   378    511622   1%    /boot
    /dev/sda2  92672000 185351 92486649 1%    /

    抱歉!这种情况编者并未测出!但在公司的生产环境发现过未重定向则任务不执行的情况,加上后解决了问题。百度也搜索到了类似问题,如有朋友了解,欢迎指教,万分感谢。

    当然,为了避免此类问题发生,建议任务都加上输出重定向,如下

    * * * * * date >> /dev/null/ 2>&1

    输出到/dev/null中,标准输入和标准错误都应处理。

    如大家对重定向有疑惑,可参见附录中的《Linux重定向》,对文解释不错。

<font color=red>程序员的感悟:在技术的世界,当我们不按常理做事,事情也不会按常理犯错。</font>

调试大招

最后的福利,编者根据自己的总结而梳理出一套快速定位crontab错误的思路。两个角度:

  • 任务是否执行
  • 命令是否正确
任务是否执行?
  • 调试思路

    首先,通过日志确认任务是否执行
    然后,如未执行则分析定时语句,
    最后,定时没有问题,检查crond服务是否开启

    下面说明具体分析步骤。

  • 日志确认
    调试错误,日志通常是个利器,crontab也有日志。
    编者的服务器中crontab日志文件位置为/var/log/cron

    查看日志
    日志中包含任务执行记录,配置错误提示,任务配置编辑重载记录,服务开启等记录。

    下面是日志的部分内容,

    $ vim /var/log/cron
    ...
    Dec 31 19:17:01 localhost crond[1455]: (CRON) bad day-of-week (/var/spool/cron/root)
    Dec 31 19:17:01 localhost CROND[4409]: (root) CMD (date)
    ...

    这里截取了对调试比较重要的两条记录,如下介绍

    执行记录

    Dec 31 19:17:01 localhost CROND[4409]: (root) CMD (date)

    显示12月21 19时17分1秒执行了date命令

    配置错误

    Dec 31 19:17:01 localhost crond[1455]: (CRON) bad day-of-week (/var/spool/cron/root)

    上面显示/var/spool/cron/root的任务配置有错,也就是root任务配置有错。错误原因:bad day-of-week,星期配置有错。

    语句是这样的

    * * * * date >> /dev/null 2>&1

    明显缺少了星期时间段。

  • 确认定时语句

    通过上面的日志分析,如任务没有执行,使用定时语句在线分析工具分析定时是否正确,非常简单。

  • 确认服务开启
    如果定时语句也正确,检查服务是否开启。检测命令如下

    Systemd方式(centos7及以上)

    $ systemctl status crond.service

    SysVinit方式(centos7以下)

    $ service crond status

    查看命令输出,如未开启,执行如下命令开启

    Systemd方式(centos7及以上)

    $ systemctl start crond.service

    SysVinit方式(centos7以下)

    $ service crond start

确认任务成功后,如问题仍未解决,继续往下看。

命令是否正确

确认命令成功与否,这里总结步骤大致如下

  • 获取命令执行输出
    crontab中的命令执行出错,多数人都不知道如何调试。我们知道在控制台执行命令时,可通过输出获取错误信息调试问题。这种方式在crontab同样适用,方法就是利用重新向获取输出,进行分析。示例如下

    * * * * * php /root/index.php >> /tmp/debug.log 2>&1

    这条任务总是执行失败,我们把输出重定向到/tmp/debug.log。
    查看debug.log,如下

    $ cat /tmp/debug.log
    /bin/sh: php: command not found
    /bin/sh: php: command not found

    显示php命令没有找到,很明显的就可以确定是环境变量的问题。这种方式定位问题非常有效。

  • 具体问题具体分析
    有了命令执行的输出,下面就是具体问题具体分析了。或许是前面提到的各种坑,也或许是命令本身所独有的问题。

调试的方法到这里就说完了。但还是实践为王,需持续总结,同时也希望大家不要在同样的坑中重复犯错。


作者:波罗学
链接:http://www.jianshu.com/p/8bf8f6529108
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

计划任务crontab 命令

Linux 系统提供了使用者控制计划任务的命令 :crontab 命令。

一、crond简介

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程。

crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度

系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:

[root@localhost ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置crond任务运行的环境变量:第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。

用户任务调度

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。
使用者权限文件:

文件 说明
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名

crontab文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

命令格式.png

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

二、crond服务

安装crontab: yum install crontabs
服务操作说明:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
加入开机自动启动:chkconfig –level 35 crond on

三、crontab命令详解

1. 命令格式:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

2. 命令功能:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

3. 命令参数:

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

4. 常用方法:

1). 创建一个新的crontab文件
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。99%的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的. profile文件,在其中加入这样一行:
EDITOR=vi; export EDITOR
然后保存并退出。不妨创建一个名为<user> cron的文件,其中<user>是用户名,例如, davecron。在该文件中加入如下的内容。

    # (put your own initials here)echo the date to the console every
    # 15minutes between 6pm and 6am
    0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console

保存并退出。确信前面5个域用空格分隔。
在上面的例子中,系统将每隔15分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:$ crontab davecron
现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。
同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。
2). 列出crontab文件
为了列出crontab文件,可以用:

    $ crontab -l
    0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1

你将会看到和上面类似的内容。可以使用这种方法在$HOME目录中对crontab文件做一备份:
$ crontab -l > $HOME/mycron
这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。
3). 编辑crontab文件
如果希望添加、删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就可以用vi来编辑crontab文件,相应的命令为:$ crontab -e
可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时,cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。
我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

       # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
    30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。
现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

       $ crontab -l 
       # (crondave installed on Tue May 4 13:07:43 1999)
       # DT:ech the date to the console every 30 minites
      0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
       # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
       30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

4). 删除crontab文件
要删除crontab文件,可以用:$ crontab -r
5). 恢复丢失的crontab文件
如果不小心误删了crontab文件,假设你在自己的$HOME目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/<username>,其中<username>是用户名。如果由于权限问题无法完成拷贝,可以用:
$ crontab <filename>
其中,<filename>是你在$HOME目录中副本的文件名。
我建议你在自己的$HOME目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。
有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按<Ctrl-D>,否则你将丢失crontab文件。

5. 使用实例

  • 实例1:每1分钟执行一次command
    命令:* * * * * command
  • 实例2:每小时的第3和第15分钟执行
    命令:3,15 * * * * command
  • 实例3:在上午8点到11点的第3和第15分钟执行
    命令: 3,15 8-11 * * * command
  • 实例4:每隔两天的上午8点到11点的第3和第15分钟执行
    命令: 3,15 8-11 */2 * * command
  • 实例5:每个星期一的上午8点到11点的第3和第15分钟执行
    命令: 3,15 8-11 * * 1 command
  • 实例6:每晚的21:30重启smb
    命令: 30 21 * * * /etc/init.d/smb restart
  • 实例7:每月1、10、22日的4 : 45重启smb
    命令: 45 4 1,10,22 * * /etc/init.d/smb restart
  • 实例8:每周六、周日的1 : 10重启smb
    命令: 10 1 * * 6,0 /etc/init.d/smb restart
  • 实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
    命令: 0,30 18-23 * * * /etc/init.d/smb restart
  • 实例10:每星期六的晚上11 : 00 pm重启smb
    命令: 0 23 * * 6 /etc/init.d/smb restart
  • 实例11:每一小时重启smb
    命令: * */1 * * * /etc/init.d/smb restart
  • 实例12:晚上11点到早上7点之间,每隔一小时重启smb
    命令: * 23-7/1 * * * /etc/init.d/smb restart
  • 实例13:每月的4号与每周一到周三的11点重启smb
    命令: 0 11 4 * mon-wed /etc/init.d/smb restart
  • 实例14:一月一号的4点重启smb
    命令:0 4 1 jan * /etc/init.d/smb restart
  • 实例15:每小时执行/etc/cron.hourly目录内的脚本
    命令:01 * * * * root run-parts /etc/cron.hourly
    说明:run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

四、使用注意事项

1. 注意环境变量问题

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

  • 1)脚本中涉及文件路径时写全局路径;
  • 2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
      cat start_cbp.sh
      #!/bin/sh
      source /etc/profile
      export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
      /usr/local/jboss-4.0.5/bin/run.sh -c mev &
  • 3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
       0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2. 注意清理系统用户的邮件日志

每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
例如,可以在crontab文件中设置如下形式,忽略日志输出:

    0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

/dev/null 2>&1表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

3. 系统级任务调度与用户级任务调度

系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过crontab –uroot –e来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

4. 其他注意事项

新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron
千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ''+%Y%m%d'在crontab里是不会执行的,应该换成date '+\%Y\%m\%d'

注意:本文转载整理自http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

注意:本文转载整理自http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

linux 脚本定时任务 计划任务crontab 命令


[root@VM_99_203_centos etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

 

计划任务crontab 命令

crontab从入门到出坑

 

 

 

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用
启动: systemctl start firewalld
查看状态: systemctl status firewalld
停止: systemctl disable firewalld
禁用: systemctl stop firewalld
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

3.配置firewalld-cmd

查看版本: firewall-cmd –version
查看帮助: firewall-cmd –help
显示状态: firewall-cmd –state
查看所有打开的端口: firewall-cmd –zone=public –list-ports
更新防火墙规则: firewall-cmd –reload
查看区域信息:  firewall-cmd –get-active-zones
查看指定接口所属区域: firewall-cmd –get-zone-of-interface=eth0
拒绝所有包:firewall-cmd –panic-on
取消拒绝状态: firewall-cmd –panic-off
查看是否拒绝: firewall-cmd –query-panic
那怎么开启一个端口呢
添加
firewall-cmd –zone=public –add-port=80/tcp –permanent    (–permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd –reload
查看
firewall-cmd –zone= public –query-port=80/tcp
删除
firewall-cmd –zone= public –remove-port=80/tcp –permanent

直接命令:service firewalld stop

 

1. Disable Firewalld Service.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl mask firewalld

2. Stop Firewalld Service.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl stop firewalld

3. Install iptables service related packages.

[root@rhel-centos7-tejas-barot-linux ~]# yum -y install iptables-services

4. Make sure service starts at boot:

[root@rhel-centos7-tejas-barot-linux ~]# systemctl enable iptables

# If you do not want ip6tables, You can skip following command.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl enable ip6tables

5. Now, Finally Let’s start the iptables services.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl start iptables

# If you do not want ip6tables, You can skip following command.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl start ip6tables

Firewalld Service is now disabled and stop, You can use iptables.

LAMP一键安装包

系统需求

  • 系统支持:CentOS 6+/Debian 7+/Ubuntu 12+
  • 内存要求:≥ 512MB
  • 硬盘要求:至少 3GB 以上的剩余空间
  • 服务器必须配置好 软件源可连接外网
  • 必须具有系统 root 权限
  • 强烈建议使用全新系统来安装

支持组件

  • 支持 PHP 自带几乎所有组件
  • 支持 MySQL、MariaDB、Percona Server数据库
  • 支持 Redis(可选安装)
  • 支持 XCache (可选安装)
  • 支持 Swoole (可选安装)
  • 支持 Memcached (可选安装)
  • 支持 ImageMagick (可选安装)
  • 支持 GraphicsMagick (可选安装)
  • 支持 ZendGuardLoader (可选安装)
  • 支持 ionCube Loader (可选安装)
  • 自助升级 Apache,PHP,phpMyAdmin,MySQL/MariaDB/Percona Server至最新版本
  • 命令行新增虚拟主机(使用 lamp 命令),操作简便
  • 支持一键卸载

安装步骤

  1. 事前准备(安装 wget、screen、unzip,创建 screen 会话)

注意:双斜杠//后的内容不要复制输入

yum -y install wget screen git // for CentOS
apt-get -y install wget screen git // for Debian/Ubuntu

  1. git clone 并赋予脚本执行权限

git clone https://github.com/teddysun/lamp.git
cd lamp
chmod +x *.sh

  1. 开始安装

screen -S lamp
./lamp.sh

组件安装

关于本脚本支持的所有组件,都可以在脚本交互里可选安装。

使用提示

lamp add 创建虚拟主机
lamp del 删除虚拟主机
lamp list 列出虚拟主机

如何升级

注意:双斜杠//后的内容不要复制输入

./upgrade.sh // Select one to upgrade
./upgrade.sh apache // Upgrade Apache
./upgrade.sh db // Upgrade MySQL/MariaDB/Percona
./upgrade.sh php // Upgrade PHP
./upgrade.sh phpmyadmin // Upgrade phpMyAdmin

如何卸载

./uninstall.sh

程序目录

  • MySQL 安装目录: /usr/local/mysql
  • MySQL 数据库目录:/usr/local/mysql/data(默认,安装时可更改路径)
  • MariaDB 安装目录: /usr/local/mariadb
  • MariaDB 数据库目录:/usr/local/mariadb/data(默认,安装时可更改路径)
  • Percona 安装目录: /usr/local/percona
  • Percona 数据库目录:/usr/local/percona/data(默认,安装时可更改路径)
  • PHP 安装目录: /usr/local/php
  • Apache 安装目录: /usr/local/apache

命令一览

  • MySQL 或 MariaDB 或 Percona 命令

/etc/init.d/mysqld (start|stop|restart|status)

  • Apache 命令

/etc/init.d/httpd (start|stop|restart|status)

  • Memcached 命令(可选安装)

/etc/init.d/memcached (start|stop|restart|status)

  • Redis 命令(可选安装)

/etc/init.d/redis-server (start|stop|restart|status)

网站根目录

默认的网站根目录: /data/www/default

https://lamp.sh/install.html

解决:LNMP架构下访问php页面出现500错误

默认情况下,如果被访问的php脚本中包含语法错误,服务器会返回一个空的“200 ok”页面

在php.ini中的fastcgi.error_header选项允许在这种情况下产生一个HTTP错误码

以使web服务器可以正确拦截并处理这个错误码,类似直接在php代码中调用header()返回500状态码,如

header(“HTTP/1.1 500 Internal Server Error”);

重新配置:在 php.ini 中设置 display_errors = on 开启错误显示,就行了

 

另外在 php-fpm.conf 中设置的php.ini选项优先于在php.ini中设置的选项,如

在 php.ini 中设置 display_errors = on

在 php-fpm.conf 中设置 php_flag[display_errors] = off

那么结果是 off

linux如何查看所有的用户和组信息?

  1. cat /etc/passwd
  2. cat /etc/passwd查看所有的用户信息,详情如下图

  3. 【步骤二】cat /etc/passwd|grep 用户名

    cat /etc/passwd|grep 用户名,用于查找某个用户,如下图

  4. 【步骤三】cat /etc/group

    cat /etc/group查看所有组信息,如下图

  5. 4

    【步骤四】cat /etc/group|grep 组名

    cat /etc/group|grep 组名,用于查找某个用户组,如下图

  6. 5

    【步骤五】用户和组常用命令

    groups 查看当前登录用户的组内成员

    groups test 查看test用户所在的组,以及组内成员

    whoami 查看当前登录用户名