Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 为普通用户(非root用户)提供初始化和关闭自动运行功能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_1@

概述

我正在主持一个实验/测试 Linux盒子,运行Debian Wheezy 7.4.0发行版.不同的用户通过ssh登录到他们的帐户,并允许他们运行开发工具,如果他们愿意,可以将他们的程序作为服务在后台运行. 由于这是一种用于各种目的的测试机器,因此通常需要重新启动整个机器,然后用户必须重新登录并重新启动正在运行的用户空间内容. 我想自动化.基本上我想为用户提供一个意思,即在机器启动后(在其他所有内容
我正在主持一个实验/测试 Linux盒子,运行Debian Wheezy 7.4.0发行版.不同的用户通过ssh登录到他们的帐户,并允许他们运行开发工具,如果他们愿意,可以将他们的程序作为服务在后台运行.

由于这是一种用于各种目的的测试机器,因此通常需要重新启动整个机器,然后用户必须重新登录并重新启动正在运行的用户空间内容.
我想自动化.基本上我想为用户提供一个意思,即在机器启动后(在其他所有内容初始化之后)启动内容并在系统关闭时启动内容(没有时间限制,基本上停止关闭直到所有关闭用户进程已完成).

到目前为止我尝试了什么:
我已经按照/etc/init.d/下的’骨架’模板文件中的原则创建了一个init bash脚本(Skeleton模板源代码https://gist.github.com/ivankovacevic/9917139)

我的代码在这里
https://github.com/ivankovacevic/userspaceServices

基本上,脚本遍历用户主目录,并在名为.startUp,.shutDown或.status的相应子目录中查找可执行文件.根据当前正在进行的事件,使用su执行脚本,就像用户自己启动它们一样.

我目前面临的问题是,在系统启动并且脚本启动其他用户的所有进程后,会出现一个奇怪的进程.这是它在进程列表中的外观:

UID        PID  PPID  C    SZ   @L_874_32@ PSR STIME TTY          TIME CMD
root      3053     1  0  1024   620   1 17:42 ?        00:00:00 startpar -f -- userspaceservices

我不知道那个进程是什么,并且man的页面没有提到-f参数.所以我很无能,但我必须做错事,因为init.d中没有其他脚本/服务在启动后将这样的进程挂起.

所以我正在找人帮我调试我的解决方案(在我看来这似乎有点复杂).或者让我知道如何以完全不同的方式实现这一点.

updatE
我已经为startpar问题启动了一个单独的问题:
startpar process left hanging when starting processes from rc.local or init.d

更新2
我原来的解决方解决了问题.检查前面提到的startpar问题. GitHub上的代码也经过修正以反映出来.

更新3 – 如何使用crontab
正如jenny建议的那样,普通用户可以使用crontab计划在启动时执行一次任务.我发现这是最简单的方法,如果您只需要在启动时启动用户任务而不是关闭.但是,当用户启动正在进行的类似服务的任务时,用户可以将cron进程“挂起”作为父进程.首先让我解释它是如何工作的:

普通用户自己应该致电:

crontab -e

(如编辑中的那样)
这将打开一个认的控制台文本编辑器及其用户crontab文件.要添加要在引导时执行的任务,用户必须在文件末尾添加一行:

@reboot /path/to/the/executable/file

现在,如果用户会这样做,并且如果该文件不仅仅是一些线性完成某些事情并结束的简单脚本,而是某种看门狗,例如,在重新启动后,您将在进程列表中以类似的方式结束:

1  2661 root       20   0 20380   860   660 S  0.0  0.0  0:00.00 ├─ /usr/sbin/cron
 2661  2701 root       20   0 33072  1152   868 S  0.0  0.0  0:00.00 │  └─ /USR/SBIN/CRON
 2701  2944 someuser   20   0  4180   580   484 S  0.0  0.0  0:00.00 │     └─ /bin/sh -c ./watchdog
 2944  2945 someuser   20   0 10752  1204  1016 S  0.0  0.0  0:00.00 │        └─ /bin/bash ./watchdog
 2945  2946 someuser   20   0 23696  4460  2064 S  0.0  0.1  0:00.01 │           └─ /usr/bin/python ./some_program.py

为了避免用户需要修改他的crontab条目,如下所示:

@reboot /path/to/the/executable/file >/dev/null 2>&1 &

文件描述符的重定向是可选的,但建议保持清洁.如果你想研究原因,试着看看它们:

ls -l /proc/pid_of_started_process/fd

解决方法

我同意你的解决方案似乎有点复杂,所以我会选择“让我知道如何以完全不同的方式实现这一点”:-)

>标准解决方案是使用配置管理系统,如puppet,并允许用户将他们的东西添加到服务器的puppet配置中.然后Puppet将推出启动脚本并将它们添加到相关的运行级别.
>更快的方法是给他们sudoedit访问/etc/rc.d/rc.local并在那里添加他们的东西.
>或者给每个目录放置他们想要启动的启动脚本,并让cron作业将这些脚本复制到/etc/init.d,在适当的位置插入su $USER -c并对它们运行chkconfig.
>或者给每个人一个目录来放置启动脚本,并在/etc/rc.d/rc.local的末尾添加一些行来浏览这些目录并在每个目录上运行编辑的su $USER -c’script start’其中的脚本.

编辑添加:5.让他们使用crontab来安排要运行的作业@reboot

大佬总结

以上是大佬教程为你收集整理的linux – 为普通用户(非root用户)提供初始化和关闭自动运行功能全部内容,希望文章能够帮你解决linux – 为普通用户(非root用户)提供初始化和关闭自动运行功能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。