Articles of 初始化

什么应该RHEL init.d脚本中的chkconfig行设置为像supervisord这样的进程控制器?

我想第一次写一个init.d脚本来启动supervisord进程。 Supervisor是一个像runit , upstart或systemd一样的过程控制器/pipe理器。 如果系统重新启动,我希望它自动启动,以便它可以启动我的应用程序。 我用这个tldp教程作为编写init.d脚本的基础。 它工作正常,但我不明白我应该如何修改文件中的这一行: # chkconfig: 2345 95 05 本教程中的注释说明: 虽然这些是注释,但它们被chkconfig命令使用,并且必须存在。 这个特定的行定义了运行级2,3,4和5,这个子系统将被优先级95(最后一个)激活,并且被优先级05(第一个之一)取消激活。 这个RHEL文档解释了各种运行级别: 0 – Halt 1 – Single-user text mode 2 – Not used (user-definable_ 3 – Full multi-user text mode 4 – Not used (user-definable) 5 – Full multi-user grapical mode 6 – Reboot 从这些select,我想我想运行在35 ,我假设1是只为系统pipe理员。 有几个例子supervisord init.d脚本,例如这里 。 我注意到,所有的RHEL […]

初始化与shell cripts的进程交互

几乎所有的linux课程都会说init进程在给定运行级别的情况下会执行适当的shell脚本来初始化环境。 但是非课程详细描述了init过程是如何实现的。 据我所知,init进程基本上是一个C程序,就像任何Hello World C代码一样。 只有更复杂。 有谁知道这个C程序如何实际运行所有的脚本并调用它们? 我真的很感激任何答案,特别是如果你有一个例子源代码的链接。

从未初始化的内存读取返回不同的答案每次

在Nicholas Ormrod在CppCon 2016上的讲话中,他提到了Facebook上一个隐藏的bug,其中一个字节从未初始化(未写入)页面被两次读取,使得第二次读取返回(非零)值不同的情况从第一个读取的值(零)。 他提到他们使用的是jemalloc , 我也假定他们在Linux上运行。 jemalloc的manpage说它总是比sbrk()更喜欢mmap() sbrk() 。 现在, jemalloc唯一的mmap()调用使用标志MAP_PRIVATE | MAP_ANONYMOUS MAP_PRIVATE | MAP_ANONYMOUS偶尔包含MAP_FIXED ,特别是它不使用MAP_UNINITIALIZED 。 这意味着页面在分配时总是被初始化 。 此外,对于匿名映射,即使madvise()和MADV_DONTNEED也会为匿名映射返回“零填充点播页面” ,我将其称为“零初始化页面”。 我的问题是:第二次读取会返回非零值,导致错误?

embedded式Linux启动和完整性监视器

也许这不是一个编程问题,即。 有一个非编程解决scheme。 我正在使用embedded式Linux的第一代产品。 我正在为系统启动,关机和完整性监控提供最好的解决scheme。 目前有一个家庭式的解决scheme,这是一个单一的C代码块,启动其他进程,然后监视他们的健康以及其他一些不相关的function。 有没有人有一个简单而强大的方法来处理embedded式设备启动,closures和完整性监控的build议? 发行版并不重要,它使用busybox,我可以添加任何我们需要的东西。 我正在寻找智慧的提示/话语 – 或rtfm和一些指针,或指向我的其他地方。 谢谢。

如何find全局静态初始化

我刚刚阅读这个优秀的文章: http : //neugierig.org/software/chromium/notes/2011/08/static-initializers.html ,然后我尝试: https : //gcc.gnu.org/onlinedocs/gccint/Initialization html的 但是,关于查找初始化程序的说法并不适用于我。 .ctors部分不可用,但是我可以find.init_array (另请参阅无法在二进制文件中find.dtors和.ctors )。 但是,我如何解释输出呢? 我的意思是,总结页面的大小也可以通过size命令和它的.bss列来处理 – 还是我错过了一些东西? 此外, nm不报告任何*_GLOBAL__I_*符号,只有*_GLOBAL__N_*函数和 – 更有趣的 – _GLOBAL__sub_I_somefile.cpp条目。 后者可能指示具有全局初始化的文件。 但我可以以某种方式获得正在运行的构造函数的列表? 理想情况下,一个工具会给我一个列表 Foo::Foo in file1.cpp:12 Bar::Bar in file2.cpp:45 … (假设我有debugging符号可用)。 有这样的工具吗? 如果不是,那么怎么写呢? .init_array部分是否包含指向可以通过一些DWARF魔术翻译到上面的代码的指针?

我如何写pid到文件

我知道这可能很容易,但我无法弄清楚。 我们希望在一台机器上运行luigi的两个实例,因此需要修改init.d脚本来将PID写入文件,而不是仅仅触及空文件。 echo -n $"Starting luigid scheduler as $LUIGID_USER: " ( ( /usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 ) &) RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/luigid && echo_success || echo_failure echo return $RETVAL 目前它只是触摸空的PID文件。 我希望它将PID写入文件。 同时停止时我想通过存储在PID文件中的PID来杀死 echo -n $"Stopping luigid scheduler: " killproc luigid RETVAL=$? [ $RETVAL -eq 0 ] && rm […]

networking连接后运行脚本

将文件放在/etc/network/if-up.d/ ,只要调出接口,就可以调用脚本。 但这并不意味着互联网连接已经build立。 这经常发生在我身上。 比如下面的代码 #!/bin/sh # Don't bother to do anything for lo. if [ "$IFACE" = lo ]; then exit 0 fi # Only run from ifup. if [ "$MODE" != start ]; then exit 0 fi # we only care about inet and inet6. case $ADDRFAM in inet|inet6|NetworkManager) ;; *) exit 0 […]

运行自定义init:无法产生主页主进程:无法执行:没有这样的文件或目录

当我在/etc/init/homepage.conf运行我的自定义初始化脚本时,在我的ubuntu 14.04盒子上出现错误 我试图通过运行它: sudo start homepage 我不断收到: start: Job failed to start 在/var/log/syslog : init: Failed to spawn homepage main process: unable to execute: No such file or directory 我试图研究它,但似乎无法确定这是为什么发生。 homepage.conf包含: start on runlevel [2345] stop on runlevel [!2345] #setuid user setuid homepage setgid www-data env PATH=/home/myuser/venv/bin chdir /home/jd/venv exec uwsgi –ini home.ini home.ini包含: module […]

关于init_task(pid 0或pid 1?)的困惑

我正在玩Linux内核,有一件事我不明白是init_task任务的PID。 据我所知,有两个特殊的pid:idle / swapper任务的pid 0,init任务的pid 1。 每个在线资源(例如一个 , 两个 )我都可以find, init_task任务代表了交换任务,即它应该有pid 0。 但是当我使用从init_task开始的for_each_processmacros打印所有的pid时,我得到pid 1作为第一个进程。 我根本没有得到0。 这意味着init_task具有pid 1,并且它是init任务(?!)。 请帮我解决这个困惑。 PS内核版本是2.4。

在recvfrom调用中,向量指向未初始化的字节

在我正在写一个函数,我试图返回一个指向无符号字符向量的指针。 相关代码如下。 std::vector<unsigned char> *ret = new std::vector<unsigned char>(buffSize,'0'); //Due to suggestions… int n = recvfrom(fd_, ret, buffSize, &recvAddress, &sockSize); //Forgot to include this in the original ret->resize(n); // display chars somehow just for testing for(std::vector<unsigned char>::iterator it=ret->begin(); it<ret->end();it++) { std::cout<<*it; } std::cout<<std::endl; … return ret; 当我通过valgrind运行这个时,我得到错误,谈论recvfrom中的缓冲区如何指向未初始化的字节。 我已经缩小到vector,因为我换了一个无符号的字符数组,一切工作正常。 有什么build议么? 编辑1:修正了一些代码,是从内存/笔记这样做,我有工作的问题。 我开始使用valgrind的原因是我在那个地方遇到了分段错误。 我会仔细检查明天我在做什么。