/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的区别

原创 2015年07月09日 17:56:55
线上的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登陆到服务器上,执行同样命令,得到了"-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的区别

线上的memcached又挂了,仍然没有得到core文件。排查原因,同事发现启动memcached的脚本存在可疑问题。 问题一:没有设置memcached工作目录,有可能core dump时没有工作目...
  • wang_xijue
  • wang_xijue
  • 2015年07月09日 17:56
  • 1402

交互式SHELL和非交互式SHELL、登录SHELL和非登录SHELL的区别

曾经写过“交互式shell和非交互式shell、登录shell和非登录shell的区别”,但那时理解相对更浅一些,现在多了一点认识,把这篇文章稍微完善一下吧。 交互式shell和非交互式shel...
  • wisgood
  • wisgood
  • 2016年07月27日 11:05
  • 3644

交互式shell和非交互式shell、登录…

也算写过一些Bash脚本的人了,不过对与这几个概念,还不是很清楚,于是恶补了一下。 交互式shell和非交互式shell、登录shell和非登录shell的区别。 首先,这是两个不同的维度来划分的...
  • li19236
  • li19236
  • 2014年11月25日 18:11
  • 2775

环境配置文件 ① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc 作用与执行顺序,以及与login/nonlogin关系

有效期与环境配置文件 1.有效期 默认情况下,在shell下的用户变量、alias等,只在此次登录中有效。一旦关闭终端或注销后,则将会设置恢复初始值。 用户可以将这些设置放入一个系统环境配置...
  • yangzishiw
  • yangzishiw
  • 2016年10月28日 16:10
  • 250

Linux Shell Bash 交互与非交互式脚本

http://blog.163.com/howl_prowler/blog/static/266197152009524105126976/
  • wangjingyu00711
  • wangjingyu00711
  • 2014年11月21日 16:51
  • 647

【笔记】etc/profile和~/.bashrc的区别

在搭建单节点的hadoop集群时,jdk的环境变量是在~/.bashrc 文件中配置的而搭建三节点的hadoop集群时,是在root用户下的 etc/profile目录下配置的环境变量两者有什么区别呢...
  • ZoeYen_
  • ZoeYen_
  • 2017年11月17日 14:26
  • 185

/etc/profile ~/.bashrc区别

安装jdk,vim,apache,nginx,php,mysql时,需要修改/etc/profile ~/.bashrc等配置文件,把几个文件的作用放到一起,对比理解。...
  • fengjunwang1980
  • fengjunwang1980
  • 2016年06月16日 17:30
  • 191

Linux下.bashrc文件和/etc/profile文件的区别

bashrc与profile的区别 要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。...
  • wangyaqi123
  • wangyaqi123
  • 2014年10月30日 10:45
  • 488

/etc/profile、~/.bashrc、/etc/bashrc、~/.bash_profile、 ~/.bash_login、 ~/.profile、/etc/environment

在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/...
  • kuyucman
  • kuyucman
  • 2014年11月06日 11:47
  • 463

关于shell启动时调用的几个配置文件/etc/profile .profile .bash_profile .bashrc等

linux下以.开头的文件为隐藏文件,今天和同事探讨了下.profile,查了下资料,记录一下。 原帖:http://www.linuxdiyf.com/bbs/thread-312980-...
  • u014055550
  • u014055550
  • 2015年02月13日 16:05
  • 831
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的区别
举报原因:
原因补充:

(最多只允许输入30个字)