系统:ubuntu server 12.04
资料:linux启动流程
资料:
init
System V init启动与Busybox init启动对比
在ubuntu12.04中/etc/rc.local
,/etc/rcN.d/README
,man service
也会有一些解释。
查看当前runlevel: 使用命令rulevel
切换运行级别:init [0123456Ss]
/etc/inittab: ubuntu 12.04中没有该文件,创建一个即可。在里面写入系统启动后进入的运行级别:id:N:initdefault:
。N是runlevel对应的数值。
相关工具: sysv-rc-conf,update-rc.d,rcconf,chkconfig
ubuntu server 12.04安装桌面后,每次启动默认进入lightDM,之后进入桌面环境。查看的runlevel为2,使用inittab文件将启动的runlevel改为3后仍然会进入桌面(原因请参考:Ubuntu init启动流程分析)。而各个rcN.d文件下也没有关于LightDM的文件。
方法一:修改内核启动参数
参考http://hi.baidu.com/y365y/item/d5ecc803934ac3dcdde5b094
。
nano /etc/default/grub
修改
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
为:
GRUB_CMDLINE_LINUX_DEFAULT=” text”
然后运行下sudo update-grub2就可了。
不过在12.04 server中GRUB_CMDLINE_LINUX_DEFAULT
的值为空(即""
)。而update-grub2命令实际上指向update-grub命令。
方法二:upstart体系
参考http://hi.baidu.com/y365y/item/d5ecc803934ac3dcdde5b094
。
/etc/rcN.d中的文件都是/etc/init.d目录中文件的软链接,/etc/init.d目录里面基本上都是/lib/init/upstart-job
文件的软连接(可以找时间分析下这个文件),upstart系统对启动项目的管理全部根据/etc/init目录里面的配置文件。所以可以修改一下/etc/init/lightdm.conf
。
在/etc/init/lightdm.conf中可以看到:
start on ((filesystem
and runlevel [!06]
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udev-fallback-graphics))
or runlevel PREVLEVEL=S)
stop on runlevel [06]
由于把runlevel设置为了3,所以改为:
start on ((filesystem
and runlevel [!036]
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udev-fallback-graphics))
or runlevel PREVLEVEL=S)
stop on runlevel [036]
方法三:/etc/lightdm/users.conf(测试失败,没搞懂hidden-users
是什么意思,也可能是该配置文件不起作用)
找到:hidden-users=nobody nobody4 noaccess
,改为:hidden-users=sunlt lotte
关于nobody,nobody4,noaccess:
Windows系统在安装后会自动建立一些用户帐户,在Linux系统中同样有一些用户帐户是在系统安装后就有的,就像Windows系统中的内置帐户一样。它 们是用来完成特定任务的,比如nobody和ftp等,我们访问LinuxSir.Org的网页程序,就是nobody用户(相当于Windows系统中 的匿名帐户);我们匿名访问ftp时,会用到用户ftp或nobody。
首先,nobody是一个普通用户,非特权用户。 使用nobody用户名的目的是,使任何人都可以登录系统,但是其UID(65534)和GID(65534)不提供任何特权,即该uid和gid只能访问人人皆可读写的文件。
其次,许多系统中都按惯例地默认创建一个nobody,尽量限制它的权限至最小,当服务器向外服务时,可能会让client以nobody的身份登录。
nobody -- an anonymous user account ,assigned by an NFS server when an unauthorized root user makes a request. The nobody user account is assigned to software processes that do not need any special permissions.
noaccess -- The account assigned to a user or a process that needs access to a system through some application without actually logging into the system.
nobody4 -- SunOS4.0 or 4.1version of the nobody account.
如何软连接:
bash >> ln -s tree.txt tree
bash >> ls -l
...
lrwxrwxrwx 1 sunlt sunlt 8 Mar 21 08:19 tree -> tree.txt
-rw-rw-r-- 1 sunlt sunlt 104946 Mar 20 07:19 tree.txt
...
示例1:记录开关机时间
ubuntu的系统日志一般放在目录/var/log中。现在制作一个简单的记录开关机时间的日志,日志文件为/home/my.log。
文件mylog-halt
内容如下:
#!/bin/bash
echo "start" >> /home/my.log
date >> /home/my.log
文件mylog-start
内容如下:
#!/bin/bash
echo "halt" >> /home/my.log
date >> /home/my.log
将mylog-start和mylog-halt放入/etc/init.d/目录中,添加执行权限。自己把这两个文件软链接到相应的rcN.d目录或者使用sysv-rc-conf之类的工具。
示例2:一个web服务器
下面是一个简单的基于python的web server示例py_http.py:
#!/usr/bin/python
from os import curdir,sep
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
content='''
<html><body><h2>hello,kugou!</h2></body></html>
'''
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(content)
def main():
server = HTTPServer(('',8080),MyHandler)
server.serve_forever()
if __name__=='__main__':
main()
按照示例1配置失败。(继续努力…)
但是将python /path/to/py_http.py &
放入/etc/rc.local
文件中成功。
一些参考:
How to Daemonize a Java Program?
python: how to write daemon in Linux
Java Daemon
mysql启动脚本分析 /etc/init.d/mysql
是/lib/init/upstart-job
的软链接。待续。
apache2脚本分析
待续。
ubuntu-upstart官方资料
待续。
相关命令:service、initctl、update-rc.d、invoke-rc.d
echo touch ~/touch_file | at now + 2 minutes
–>两分钟后建立/更新文件~/touch_file echo shutdown -h now | at now + 4 hours
–>4小时后关机。
查看命令cron、crontab的man文档,其中man 5 crontab
获得的内容比man crontab
更加详细。
资料:Linux Crontab 定时任务 命令详解
资料:linux的nohup命令的用法
桌面程序
进入 ~/.config/autostart 目录 ,创建以名字加.desktop的文件(一个可执行的shell脚本什么的应该也可以),类似于application目录中的文件,如果要只在某种桌面环境下启动,可以在相应的desktop目录中添加OnlyShowIn=<desktop-name>;
,例如OnlyShowIn=KDE;
。
其他autostart目录:
/etc/xdg/autostart
/usr/share/autostart
/usr/share/gdm/autostart
/usr/share/gnome/autostart
~/.config/autostart
~/.kde/share/autostart
~/.local/share/autostart
其他用户配置文件
如/etc/bash.bashrc,~/.bashrc
ubuntu以及ubuntu类linux系统的运行级别的理解(关闭图形界面)
What is the difference between /etc/init/ and /etc/init.d/?
ubuntu-启动
System V init启动与Busybox init启动对比
Linux系统日志分析与管理
Linux系统日志管理