重启后在屏幕上启动程序

重启后在屏幕上启动程序

我正在运行几个无头 Ubuntu 12.04 机器。我的典型用法是通过 putty 会话登录到每台机器并使用 screen 执行脚本。

通过 putty 登录后,我从命令行执行以下操作: screen /home/user/"script"

我的问题是:

有什么方法可以让我的脚本/程序在重启后自动运行?我想防止在断电/自动重启的情况下生产力下降。

答案1

您可以使用 cron 来为您完成此操作。

  • 只需crontab -e在终端中执行
  • 它将在您选择的编辑器中打开,您可以在其中输入
    @reboot <your command>
    (确保您提供所有可执行文件的完整路径)
  • 保存文件并退出

参考:http://manpages.ubuntu.com/manpages/precise/en/man5/crontab.5.html

答案2

执行此操作的官方方法是创建 init 脚本。这些脚本具有启动、停止、重新启动和状态命令,并且可以配置为在特定时间运行这些命令。因此,当您切换到 leven 6(重新启动)时,它将在重新启动之前停止服务,如果配置正确,它将在切换到运行级别 3 时自动在此脚本上运行启动。您可以在 /etc/init.d 中找到这些脚本。如果您正确创建了文件(因此它必须能够处理启动和停止参数),您可以运行 update-rc.d script.sh defaults 将其设置为自动启动。确保您首先在脚本上执行了 chmod +x 以使其可执行。文件夹 /etc/init.d 包含大量有关如何完成此操作的示例。

还有 /etc/rc.local 文件,该文件在系统完全启动后运行,您可以添加自己的命令。

我个人更喜欢 init.d 脚本,因为您可以确保程序正常关闭,从而防止可能的数据丢失或其他错误。但对于一个命令,或者一些不能真正破坏 /etc/rc.local 的东西来说,这样做就很好了。

答案3

修改脚本,使其可以作为 init 脚本或更好的 upstart 作业调用。运气好的话,您可以保留其原样,只需向 中添加 upstart 配置即可使其在启动时运行/etc/init。(将那里的任何小.conf文件作为模板。)

您需要注意两件事:

  1. 您的脚本以 root 权限调用。删除它们,以便您的脚本以适当的用户权限(在本例中为您的用户身份)运行。通过使用以下方式调用脚本中的最后一个屏幕命令来执行此操作su

    su -c "screen ..." - username

  2. 在启动时启动时,脚本在没有控制终端的情况下运行,而您当前是从 shell 运行的。由于您使用,screen我假设您希望在下次登录时重新连接到运行的终端script。如果是这样,则可能需要在调用时传递额外的选项screen

答案4

我尝试了以上所有方法,但都没有成功。我正在运行的脚本需要 X 才能启动。

尽管这可能是最简单的解决方法,但最终还是奏效的方法是在我的主目录中创建一个名为 launch.sh 的小脚本,并将其添加到 Ubuntu 启动应用程序列表中。

launch.sh 包含以下内容并从其中执行了我的脚本:

#!/bin/sh
screen -dmS 051 /home/{user}/{myscript} 

我发现 launch.sh 启动应用程序的配置文件包含在文件 /home/{user}/.config/autostart/launch.sh.desktop 中,我能够在其他机器上的相同位置重新创建这两个文件并重现成功。感谢所有试图提供帮助的人。找到解决方法后,我省了很多力气。

相关内容