内核: 实现进程管理, 内存管理, 网络管理, 驱动程序管理, 文件系统管理, 安全管理等功能
rootfs: 根文件系统, 包含程序和glibc库
程序: 二进制执行文件
库: 函数集合, function, 调用接口

资料来自51cto: http://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg
1. 加载BIOS的硬件信息, 获取第一个启动设备
2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3. 加载核心操作系统的核心信息, 核心开始解压缩, 并尝试驱动所有的硬件设备
4. 核心执行init程序, 并获取默认的运行信息
5. init程序执行/etc/rc.d/rc.sysinit文件, 重新挂载根文件系统
6. 启动核心的外挂模块
7. init执行运行的各个批处理文件(scripts)
8. init执行/etc/rc.d/rc.local
9. 执行/bin/login程序, 等待用户登录
10. 登录之后开始以shell控制主机
POST: Power On Self Test, 加电自检, 是BIOS功能的一个主要部分, 与操作系统无关, 是硬件功能. 负责完成对CPU, 主板, 内存, 硬盘子系统, 显示子系统, 串并行接口, 键盘等硬件情况的检测
主板的ROM: BIOS, Basic Output System, 保存着有关计算机系统最重要的基本输入输出程序, 系统信息设置, 开机加电自检程序和系统启动自举程序等. 服务器加电后, BIOS会自动把BIOS内的程序加载到CPU, 然后进行加电自检
主板的RAM: CMOS互补金属氧化物半导体, 保存各项参数的设定, 按次序查找引导设备, 第一个有引导程序的设备为本次启动设备
引导加载器, 用来引导程序, 不同操作系统的bootloader不一样
Windows: ntloader, 仅支持启动OS
Linux: 功能丰富, 提供菜单, 允许用户选择要启动的系统或不同的内核版本, 把用户选定的内核装在到内存的特定空间中, 解压, 展开, 并把系统控制权移交给内核
LILO: Linux Loader, 早期的bootloader, 功能单一
GRUB: Grand Unified Bootloader, CentOS 6 GRUB 0.97:GRUB Legacy, CentOS7 以后使用 GRUB 2.02
1st stage: MBR的前446个字节, 存放GRUB第一阶段的数据
1.5 stage: MBR之后的扇区(加载对应的文件系统驱动), 让stage1中的bootloader能识别stage2所在分区上的文件系统
启动菜单, 内核等文件都是存在文件系统上的, 因此, 需要1.5阶段, 帮助GRUB去识别文件系统, 进到对象的目录拿到相应的文件
MBR, 磁盘的第一个扇区, 512个字节
前446个字节用来引导GRUB第一阶段
中间64个字节分区表
后两个字节标记位
[08:30:10 root@centos-7-1 ~]#ll /boot/grub2 # CentOS6上保存在/boot/grub
total 32
-rw-r--r--. 1 root root 84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root 25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg # 启动菜单文件
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale
grub.conf启动菜单的修复-案例1
initramfs-3.10.0-1127.el7.x86_64.img # 存放文件系统驱动, 让内核加载操作系统的根, 模拟一个小型根系统
而1.5阶段, 利用MBR后续扇区是为了让bootloader能识别/boot分区, 而/boot分区和根分区不一样在同一分区, 所有要有单独的文件来帮助内核加载根分区
initramfs和内核文件都存放在了/boot目录里, 因此在启动菜单中, initramfs要放在kernel后, 先加载内核





确认无误后, 按b启动
启动后修改grub.conf, 否则下次重启还是无法启动
grub.conf启动菜单的修复-案例2
grub.conf存着启动的菜单, 一旦该文件丢失, 系统将无法启动
mv /boot/grub/grub.conf /data


CentOS6破解root口令
CentOS6启动过程中, 加载完bootloader会加载内核, 根文件系统, 加载init进程, 然后启动init进程
init进程启动时会读取其配置文件, /etc/inittab, 其中定义了系统启动的模式,7种模式: 0 - 6






按回车, 进入启动, 然后修改/etc/inittab文件
若要破解root用户, 需要启动时进入1,单用户模式
单用户模式, 只有一个用户能使用Linux, 远程连接都会端断开
可以切换用户, 但是不能开启多个终端, 也不能远程
一般在系统维护时可以使用

输入1, 按回车进入单用户模式
再次启动后, 会直接进入系统, 而且身份是root, 无需密码
passwd重置密码即可
破解口令必须能到机房或者服务器面前去破解, 因此 虽然破解过程简单, 但并不是所有人都有机会
给grub加密, 防止root破解



注意: 即使grub加密了, 还是可以通过救援模式破解口令, 因此, 一定要确保服务器的物理安全
破坏GRUB第一阶段, MBR前446个字节, 可以通过救援模式修复, 但是,grub.conf菜单文件是无法修复的, 需要手写
内核自身初始化的过程
1. 探测可识别到的所有硬件设备
2. 加载硬件驱动程序(借助于ramdisk加载驱动)
3. 以只读方式挂载根文件系统
4. 运行用户空间的第一个应用程序: /sbin/init
内核特点:
支持模块化: .ko(内核对象), 如: 文件系统, 硬件驱动, 网络协议等
支持内核模块的动态装载和卸载
内核组成部分:
核心文件: /boot/vmlinuz/VERSION-release
ramdisk: 辅助的伪根系统, 加载相应的硬件驱动, ramdisk --> ramfs提高速度
CentOS5 /boot/initrd-VERSION-release.img
CentOS6以后版本/波特/initramfs-VERSION-release.img
模块文件: /lib/modules/VERSION-release
范例: 误删除内核文件/boot/vmlinuz-2.6.32-754.el6.x86_64无法启动的故障恢复
rm -rf /boot/vmlinuz-2.6.32-754.el6.x86_64
reboot
进入救援模式
切根 chroot /mnt/sysimage
挂载光盘 mount /dev/sr0 /mnt
复制内核文件 cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
sync
exit
reboot
ramdisk文件的制作
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
dracut /boot/initramfs-$(uname -r).img $(uname -r)
案例: 误删除/boot/initramfs-2.6.32-754.el6.x86_64.img无法启动, 故障恢复
rm -rf /boot/initramfs-2.6.32-754.el6x86_64.img
reboot
进入救援模式
chroot /mnt/sysimages # /etc/fstab文件存在时, 系统启动后自动找到根分区, 把根分区挂载到/mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
sync
exit
reboot
POST --> BootSeqyence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(只读) --> init(systemd)
init程序类型:
Upstart: init, CentOS6, 配置文件: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS7, 配置文件: /usr/lib/systemd/system, /etc/systemd/system
运行级别
为系统运行或维护等目的而设定, 0-6, 共7个级别, 一般使用3,5作为默认级别
0 -- 关机
1 -- 单用户模式(root自动登录), 维护模式, 只有一个用户能登录
2 -- 多用户模式, 启动网络功能, 但不会启动NFS, 维护模式
3 -- 多用户模式. 正常模式, 文本界面
4 -- 预留级别, 可同3级别
5 -- 多用户模式, 正常模式, 图形界面
6 -- 重启
命令行切换级别
init 数字
CentOS6服务管理
K开机不自动运行, 数字越小, 越先运行, 数字越小的服务, 通过是依赖其他服务的服务
S开机自动运行, 数字越小, 越先运行, 数字越小的服务, 通过为被依赖的服务, 其他服务依赖其运行
配置服务开机启动
chkconfig
查看服务在所有级别的启动或关闭情况
chkconfig [--list] [name]
编写启动脚本, 添加到/etc/rc.d/init.d(/etc/init.d)中, 实现服务开机自启
#!/bin/bash
chkconfig: #### S数字 K数字 # 如果想让服务在任何级别都不启动, 级别用-表示
description: 描述信息
....
脚本写完, 执行 chkconfig --add NAME, 把服务添加到init.d中
将任务从init.d删除
chkconfig --del NAME
服务刚加入到chkconfig列表时, 所有运行级别初始状态都是off
CentOS6, 希望开机自动运行但是不方便写启动脚本的命令可以放在/etc/rc.d/rc/local, 该文件会在所有init.d下的启动文件运行完运行
CentOS7和8也兼容这种方式, 但是, 需要给该文件加执行权限
非独立服务: 按需启动, 需要被其他服务唤醒, 超级守护进程(xinetd进程)
以telnet服务为例
telnet是非独立服务, 平时不会工作, 有连接请求时会由xinetd唤醒
但是, 服务安装后,默认都是关闭状态, 因此, 需要先设置为开机自动启动, chkconfig telnet-server on
另外, xinetd默认系统是没有的, 安装非独立服务后会自动安装xinetd





恢复过程:
由于fstab文件被删除, 系统启动后无法识别根分区, 也就无法把光盘中的/mnt/sysimage挂载到/目录下




sda4为扩展分区, sda5为swap
sda1 只有一个G, 根分区不会这么小, 一般/boot在1-2个G左右
sda2和sda3就是根分区和数据分区了, 所以要大概知道原本每个分区的容量
创建/mnt/rootfs目录, 将/dev/sda1挂载上去, 可以看到目录是空的, 因为可以知道/dev/sda1是/boot分区, 因为里面的文件都被删了

可以看到其中包含了/分区的目录



sync同步, 重启
再次进入救援模式, 因为已经修复了fstab, 那么是可以找到硬盘的根分区的, 会把根挂载到/mnt/sysimage下



sync同步


vim /boot/grub/grub.conf

/proc目录: 内核把自己内部状态信息及统计信息, 以及可配置参数通过proc伪文件系统加以输出
内核参数分为:
只读参数: 只用于输出信息
可写参数: 可接受用户指定的"值"来实现对内核某功能或特性的配置
/proc/sys的设置
sysctl -w path.to.oarameter=VALUE #临时设置
/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
范例:
sysctl -w kernel.hostname=123.com
echo命令通过重定向方式也可以修改大多数参数的值
echo "VALUE" > /proc/sys/path/to/parameter
echo "webserver" > /proc/sys/kernel/hostname
sysctl命令:
sysctl -w parameter=VALUE
sysctl -p [/path/to/conf_file]
sysctl -a
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p # -p默认加载/etc/sysctl.conf文件, 如果配置放在了其他文件里, 需要-p指定路径
常用内核参数
net.ipv4.ip_forward # 开启路由转发
net.ipv4.icmp_echo_ignore_all # 禁ping
net.ipv4.ip_nonlocal_bind # 允许应用程序可以监听本地不存在的ip地址
vm.drop_caches # 清理缓存
fs.file_max=1020000 # 最大打开文件个数限制
net.ipv4.ip_nonlocal_bind
让服务器监听在本地不存在的端口, 一般用在调度器上, 配合keepalived, 监听在vip上
但是vip本身在调度器是不存在的, 所以要修改参数使服务器能监听这个本地不存在的ip
/sys目录主要和硬件相关. 为用户使用的伪文件系统, 输出内核识别出的各硬件设备的相关属性信息
也有内核对硬件特性的设定信息, 有些参数是可以修改的, 用于调整硬件工作特性
udev通过此路径下输出的信息动态为各设备创建所需要的设备文件, udev是运行用户空间程序专用工具: udevadmin, hotplug
udenv为设备创建设备文件时, 会读取其事先定义好的规则文件, 一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下
内核组成部分:
kernel: 内核核心, 一般为bzImage, 通常在/boot目录, vmlinuz-VERSION-RELEASE
kernel object: 内核对象, 一般放置于 /lib/modules/VERSION-RELEASE/
辅助文件: ramdisk. initrd: CentOS5以前, initramfs: CentOS6以后
uname命令, 查看运行中内核信息
-n 显示节点名称
-r 显示内核版本
-a 显示内核所有信息
lsmod命令:
显示内核已经装载好的内核模块, 内容为模块名称, 大小, 使用次数, 被哪些模块所依赖
显示的内容来自:/proc/modules文件
systemd: 从CentOS7版本之后开始使用systemd实现init进程, 7以后init仅为systemd的软连接, 系统启动和服务器守护进程管理器, 负责在系统启动或运行时, 激活系统资源, 服务器进程和其他进程
系统引导时实现服务并行启动
按需启动守护进行, 比如CentOS6上的非独立服务, 由xinetd唤醒. CentOS7上由systemd唤醒
自动化的服务依赖关系管理
同时采用socket式于D-Bus总线式激活服务
socker与服务程序分离 # 节约资源, socket文件处于打开状态监听端口, 但是服务只有有人访问时才启动, 或者人为启动. 第一次按需启动, 之后一旦启动就不会自动关闭了
向后兼容sysv init脚本
使用systemctl命令管理, systemclt命令固定不变, 不可扩展, 非由systemd启动的服务, systemctl无法与之通信和控制
系统状态快照
不同版本的服务启动区别
unit表示不同类型的systemd对象, 通过配置文件进行识别和配置; 文件中主要包含系统服务, 监听socket, 保存的系统快照以及其他与init相关的信息
unit主要类型
service.unit: 文件扩展名为.service, 用于定义系统服务
socket.unit: .socket码定义进程间通信用的socket文件, 也可以在系统启动时, 延迟启动服务, 实现按需启动
unit配置文件
/usr/lib/systemd/system: 每个服务最主要的启动脚本设置. 类似/etc/init.d/
/lib/systemd/system: ubuntu的对应目录
/run/systemd/system: 系统执行过程中所产生的服务脚本, 比上面目录优先运行
/etc/systemd/system: 管理员建立的执行脚本, 类似/etc/rcN.d/Sxx的功能, 比上面目录优先运行
systemctl start | stop | restart | enable --now NAME
禁止自动和手动启动服务
systemctl mask name.service
systemctl unmask name.service
target units: 相当于CentOS6之前的runlevel
unit配置文件: .target
0 关机
1 救援模式
2,3,4 多用户
5 图形
6 重启
lrwxrwxrwx. 1 root root 15 Oct 29 21:40 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Oct 29 21:40 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Oct 29 21:40 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Oct 29 21:40 /usr/lib/systemd/system/runlevel6.target -> reboot.target
1. UEFI或BIOs初始化, 运行POST开机自检
2. 选择启动设备
3. 引导装载程序, CentOS7后为grub2, 加载装载程序的配置文件: /etc/grub.d /etc/default/grub /boot/grub2/grub.cfg
4. 加载initramfs驱动模块
5. 加载内核选项
6. 内核初始化, CentOS使用systemd代替init
7. 执行initrd.target所有单元, 包括挂载/etc/fstab
8. 从initramfs根文件系统切换到磁盘根目录
9. systemd执行默认target配置, 配置文件/etc/systemd/system/default.target
10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
11. systemd启动multi-user.target下的本机与服务器服务
12. systemd执行multi-user.target下的/etc/rc.d/rc.local
13. systemd执行multi-user.target下的getty.target及登录服务
14. systemd执行graphical需要的服务
方法1:

按e键进入编辑模式
将光标移动linux开始的行, 末尾添加内核参数rd.break

mount -o remount, rw /sysroot
chroot /sysroot
passwd root

如果SELinux是启用的, 那么需要执行下面操作, 如果没有启动, 不需执行
touch /.autorelabel
8 exit, reboot
方法2:
启动时任意键暂停启动
按e进入编辑模式
将光标移动到linux开始的行, 末尾添加rw init=/sysroot/bin/sh
按ctrl -x启动
chroot /sysroot
passwd root
# 如果SELinux是启用的, 才需要执行下面操作
touch /.autorelabel
exit
reboot
[20:09:19 root@centos-7-1 ~]#grub2-setpassword
Enter password:
Confirm password:
[20:15:58 root@centos-7-1 ~]#ls -l /boot/grub2
total 36
-rw-r--r--. 1 root root 84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root 25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale
-rw------- 1 root root 298 Feb 5 20:15 user.cfg
[20:16:04 root@centos-7-1 ~]#cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CFE85393B86CB607472A627A7E351405116594BBDDE32B6092EF6DB32E22AEE8F8C083DD0B2078D9782AB89B3FFCA12E1440C400DACD672E7A1961F1591C258D.051CE5E46915AF217A54A7FCA87D97BC7CECE67003DBF6931D69BB15410B16567C8E39D43F1A180D6D4FF7FB8EA71AAFA588EEA2339F5A64B2C6F6AE10E2562F

清空grub2密码
[20:18:22 root@centos-7-1 ~]#cat /dev/null > /boot/grub2/user.cfg
GRUB2: CentOS7 和 8 以及Ubuntu1804都适用
引导提示时可以使用命令行界面, 可从文件系统引导
主要配置文件:/boot/grub2/grub.cfg
修复配置文件: grub2-mkconfig > /boot/grub2/grub.cfg
修复grub2
grub2-install /dev/sda #BIOS环境
grub2-install #UEFI环境
案例: CentOS8删除/boot下的文件后进行恢复
CentOS8 必须先安装grub, 再安装kernel, 否则安装kernel-core时会提示grub出错
chroot /mnt/sysimage
grub2-install /dev/sda
mount /dev/sr0 /mnt
CentOS7
rpm -ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force
CentOS8
rpm -ivh /mnt/BaseOS/Packages/kernel-core-4.18.0-147.el8.x86_64.rpm --force
生成grub2.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
exit
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我想用Capistrano启动sidekiq。下面是代码namespace:sidekiqdotask:startdorun"cd#{current_path}&&bundleexecsidekiq-c10-eproduction-Llog/sidekiq.log&"pcapture("psaux|grepsidekiq|awk'{print$2}'|sed-n1p").strip!endend它执行成功但sidekiq仍然没有在服务器上启动。输出:$capsidekiq:starttriggeringloadcallbacks*2014-06-0315:03:01executing`