线上的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. find指令使用手册

    find 目录 条件 选项 find . –print find . –print0 .指明在当前目录中查找 -print 打印匹配文件的文件名,使用‘\n’作为分隔文件的定位符 -print0 打印 ...

  2. Linux中的FTP服务

    FTP服务 文件传输协议 FTPFile Transfer Protocol 早期的三个应用级协议之一 基于C/S结构 双通道协议:数据和命令连接 数据传输格式:二进制(默认)和文本 两种模式:服务器 ...

  3. 项目:开发->测试->上线:流程规范

    1) 项目分析 2) 项目经理分工协作 程序就具体流程: 1: 按项目名称: 建git, 数据库, 线上测试虚拟机 2: 按项目经理分配的大的模块. 自行划分工作阶段 a: 划分为小的模块 b: 预估 ...

  4. day23 01 类的命名空间

    day23  01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...

  5. 我们需要了解的五个ERP趋势

    企业的全面现代化进程伴随着ERP的发展.在2019年,预计规模较小的供应商将加大力度,双层ERP(Two-Tier ERP)将开始占据市场份额,企业也将要求更加灵活的ERP的实施方案. 该预测基于咨询 ...

  6. pytest以类形式的测试用例

    from __future__ import print_function#pytest以类形式的测试用例class TestClass: @classmethod def setup_class(c ...

  7. luoguT21777

    #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> ...

  8. 解决Can’t finish GitHub sharing process Successfully created project ‘GitHubDemo’ on GitHub

    Can't finish GitHub sharing process        Successfully created project 'KeyWordsFrameWork' on GitHu ...

  9. 服务器安装oracle前的内存调整

    #当前内存大小为512MB,安装oracle时执行检查... Checking physical memory requirements ... Expected result: 922MB Actu ...

  10. noip 2010 数字统计

    数位dp解水题 luogu1179 dp[i][j]表示 有i位,且首位是j(包括0) 的 ‘2’的个数 dp[i][j]={ Σ(dp[i-1][k]),j!=2; Σ(dp[i-1][k])+va ...