我仍在尝试学习更多有关 bash 脚本和启动/重启的知识,我已经阅读了有关 crontab @reboot 的内容,也在查看其他选项,但我只是想知道是否有人可以在我发现我所尝试的方法存在限制之前为我指明正确的方向...
以下是我想要实现的目标:
我有两个用户需要在重启/启动时运行进程:
用户 1:5 个进程均以标准权限运行(这里没有问题)
用户 2:2 个升级命令(sudo)和 5 个进程标准权限才能运行,但只有当 mysql 和上述进程处于活动状态时才能运行。
我只能通过 ssh 访问服务器,所以这就是我选择从所读信息中尝试 bash/cron 方法的原因。
我已经测试过 sudo 命令与 bash 脚本一起工作并且看起来不错,所有帐户都使用密钥而不是密码,因此不会提示我确认密码,我还没有在重新启动时测试这个但很快就会测试。
主要问题是在让用户 2 开始工作之前检查用户 1 运行的 5 个进程是否已加载,使用两个单独的 bash 脚本,是否可以创建等待或循环来检查正在运行的进程名称,然后再继续?
谢谢
答案1
我不完全确定这是否是您要找的,但我相信 .profile 是在个人用户启动时运行的。
我希望这能帮助您解决一半的问题,但是如果您同时记录用户,我不相信它会按顺序工作。
我用来检查进程的一种方法是使用 python 脚本。我不知道是否可以在 bash 中进行松散检查,但我知道在 python 中你可以尝试使用 Popen 来运行终端命令
ps aux | grep the-process
像这样
p = subprocess.Popen(('ps', 'aux'), stdout=subprocess.PIPE)
g = subprocess.Popen(("grep", "the-process"), stdin=p.stdout, stdout=subprocess.PIPE)
它会返回一个具有该名称的正在运行的进程列表。运行检查,然后您可以让它循环,直到结果为真。
希望这也有帮助。
答案2
是的,你可以。下面是一个例子,这个脚本休眠 30 秒,你也可以使用 1m 来休眠 1 分钟。你也可以尝试将 /root/myscript 添加到 /etc/rc.local,但我不知道这是否符合你需要的执行时间。
#!/bin/bash
sleep 30
/root/myscript