线上的memcached又挂了。仍然没有得到core文件。

排查原因,同事发现启动memcached的脚本存在可疑问题。

问题一:没有设置memcached工作文件夹,有可能core dump时没有工作文件夹写权限
这些脚本由crontab启动。脚本中没有设置工作文件夹。而这是非root用户的crontab。启动memcached时,工作文件夹不是memcached可执行文件所在文件夹。实验证明,这个是用户的home文件夹,crontab执行的脚本中打印pwd,结果是"home/work",work是当前用户。
问题二:在/etc/profile中设置的ulimit -c unlimited对crontab的脚本是无效的
在查阅相关文档后得知。/etc/profile中的设置仅仅对Login Shell生效,而crontab执行脚本的shell环境是non-login的,不会载入/etc/profile的设置。

在这里。须要总结一下/etc/profile与/etc/bashrc的差别。以及交互式与非交互式、login与non-login shell概念的差别。

熟悉Linux的程序猿应该有过在~/.profile文件里环境变量设置的经验,在~/.profile设置的环境变量仅仅会对那一个用户有效。而假设要对所有的用户有效,则要设置/etc/profile。/etc/profile就是~/.profile的全局版本号。其实。一旦打开一个交互式login shell,或者以--login选项登录的非交互式shell。都会首先载入并运行/etc/profile中的命令,然后再依次载入~/.bash_profile,
~/.bash_login, 和~/.profile中的命令。


这里又涉及到交互式shell与非交互式shell,login shell与non-login shell的概念。依照这两个维度划分,那么共同拥有四种shell:交互式login shell,交互式非login shell,非交互式login shell。非交互式非login shell。

交互式的:顾名思义。这样的shell中的命令时由用户从键盘交互式地输入的,执行的结果也可以输出到终端显示给用户看。

非交互式的:这样的shell可能由某些自己主动化过程启动,不能直接从请求用户的输入。也不能直接输出结果给终端用户看。输出最好写到文件。

login的:意思是这样的是在某用户由/bin/login登陆进系统后启动的shell,跟这个用户绑定。这个shell是用户登陆后启动的第一个进程。login进程在启动shell时传递第0个參数指明shell的名字,该參数第一个字符为"-",指明这是一个login shell。比方对bash而言,启动參数为"-bash"。

当bash以login
shell启动时,它会运行/etc/profile中的命令,然后/etc/profile调用/etc/profile.d文件夹下的全部脚本。然后运行~/.bash_profile。~/.bash_profile调用~/.bashrc,最后~/.bashrc又调用/etc/bashrc。

要识别一个shell是否为login shell。仅仅需在该shell下运行echo $0:
# echo $0
假设输出为该shell名字,加上一个'-'前缀。则说明该shell为login shell。比如-bash,-su等等。实验一下。在本人的Ubuntu系统下。打开Terminal,输入echo $0,得到的是"bash",说明这不是一个login shell。而由SSH登陆到server上,运行相同命令。得到了"-bash"的结果,说明由SSH登陆的为login
shell。

非login的:不需login而由某些程序启动的shell。

传递给shell的參数,是没有'-'前缀的。还以Bash为例。当以非login方式启动时,它会调用~/.bashrc。随后~/.bashrc中调用/etc/bashrc。最后/etc/bashrc调用全部/etc/profile.d文件夹下的脚本。

这个有兴趣的能够打开这些文件看一看。非login的shell主要包含以"#su","#su USERNAME"启动的shell。和图形终端(比如Ubuntu的Terminal),运行的脚本等等。

识别非login的shell方法还是运行#echo
$0命令,得到的结果假设没有'-'前缀。即为非login的。


回到我们遇到的问题,在crontab中启动的脚本的shell都是非login的。那么就不会载入/etc/profile中的命令。从而我们在/etc/profile中设置的"ulimit -c unlimited"命令对crontab中启动的脚本也是无效的了,因此这些脚本中启动的memcached意外挂掉后也不会有core文件了。

/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的差别的更多相关文章

  1. 《学渣Linux笔记》——关于.bashrc与profile(涉及交互式与非交互式、登录与非登录shell)

    <学渣Linux笔记>--关于.bashrc与profile(涉及交互式与非交互式.登录与非登录shell) 1.基本概念(个人理解) 交互式shell:等待用户输入,并执行相应操作的sh ...

  2. 登录式与非登录式&交互式与非交互式shell及其环境初始化过程

    交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的 ...

  3. shell的交互式和非交互式登录

    工作中经常碰见环境变量加载问题,归根结底就是配置文件的加载问题. 一般会有四种模式:交互式登陆.非交互式登陆.交互式非登陆.非交互非登陆. 交互式和非交互式对环境变量的加载: +----------- ...

  4. mysql交互式连接&非交互式连接

    交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tom ...

  5. 【转】mysql交互式连接&非交互式连接

    交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tom ...

  6. 交互式shell和非交互式shell、登录shell和非登录shell的区别

    交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...

  7. shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本

    shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...

  8. python SSH客户端的交互式和非交互方式

    使用python中有一个paramiko模块来实现python SSH客户端,与SSH服务器交互时,需要注意有交互式和非交互式的区别. 只执行单条命令,之后就断开链接,可以使用非交互方式.执行多条命令 ...

  9. (转)SSH批量分发管理&非交互式expect

    目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3. ...

随机推荐

  1. jQuery的on绑定click和直接绑定click区别

    状况之外 在之前的公司并没有遇到这个问题,也就没有深究.直到自己换了现在的公司,刚来第二天就开始写别人写到一半的项目,很无奈,不是原生就是jquery,由于项目急,已经来不及切换框架重新布局,只能继续 ...

  2. js中表格的相关操作

    tHead:表头 tBodies:表格正文 tFoot:表格尾 rows:行 cells:列 表格的应用: 1.获取 2.表格创建 3.隔行变色 4.删除一行 <!DOCTYPE html> ...

  3. openstack创建虚拟机之后使用ssh登陆的解决办法

    创建一个虚机之后:若果想要在horizon的控制台上登录操作,第一步.需要先使用ssh从controller上修改密码 从controller上登录: ssh ubuntu@虚机ip sudo su ...

  4. luogu2894 [USACO08FEB]酒店Hotel

    跟线段树求区间最值一样每个节点维护左边开始的最大连续空房间数.右边开始的最大连续空房间数.这个区间内的最大连续空房间数 #include <iostream> #include <c ...

  5. 数组和String几种方法的需要注意的地方

    array的方法总结 会更改原来的的数组 push.unshift方法,返回length.增加值得就返回length,其他返回该元素 pop,shift返回该元素 reverse返回该元素 splic ...

  6. Linux 磁盘测速

    读: time dd if=/dev/zero of=/test.dbf bs=8k count=1000000 写: time dd if=/dev/zero of=/var/test bs=8k ...

  7. 【贪心+前缀】C. Fountains

    http://codeforces.com/contest/799/problem/C [题意] 有n做花园,有人有c个硬币,d个钻石 (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 ...

  8. MT6755 使用R63350 IC 出现唤醒概率性闪白,并导致ESD FAIL

    现象描述. 手机自动灭屏后按power键或home 键点亮屏幕,概率性上方有白色的一道,还会闪两三下屏.使用的LCM IC是:r63350, (FHD VDO)屏,附件为mtklog看看是什么原因? ...

  9. Easy sssp(vijos 1053)

    描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程序, 判断这个有向图中是否存在负权回路. 如果从一 ...

  10. 免费第三方API平台整合

    各大平台免费接口,非常适用 http://developer.51cto.com/art/201412/458778.htm 绝对干货:供个人开发者赚钱免费使用的一些好的API接口http://www ...