重启后启动终端并从systemd执行脚本

时间:2017-11-05 13:55:49

标签: linux bash scripting systemd upstart

我一直在创建一个安装脚本,仅用于在Ubuntu Xenial Desktop上安装代理和开发配置。

我有2个脚本都是交互式的,需要用户输入,我的挑战是每个脚本在安装后需要重新启动,然后需要自动打开另一个控制台并与下一个脚本交互。

这是一个流程图:

  script_1.sh  >  reboot  >  script_2.sh 
       V                          V              
   usr input                  usr input               
   required                   required                 

我已完成所有脚本并正常工作,因为我们的挑战是尝试配置Systemd,因此在重新启动后它将打开一个控制台并开始下一个脚本。

我是新手,但是我使用rc.local构建了一些东西,然后阅读帖子的大小,说这不适合用于这些类型的安装,我开始使用upstart然后我发现它已被弃用了我我需要使用Systemd。

显然,我会建立这些脚本并将其复制并在此过程中完成后将其删除,这是先前的尝试,如果这样做的任何帮助都会很棒,因为我已经失去了2天。< / p>

之前的尝试:

description     "install script"

start on local-filesystems or runlevel [2345]
stop on runlevel [!2345]

pre-start script
    # prepare environment
    touch /var/logs/DID.log
    exec echo DID installation started  `date` >> /var/log/DID.log
end script

script
    # do some stuff
    exec ~/Documents/script_2.sh
    console output
end script

post-stop script
    # clean up
    exec echo DID stage 2 installation finished  `date` >> /var/log/DID.log
end script

提前为您提供任何帮助而欢呼。

1 个答案:

答案 0 :(得分:0)

您可以创建可能帮助您的用户系统脚本(https://wiki.archlinux.org/index.php/Systemd/User)。

以下是一个简短示例,说明如何在systemd中启动脚本(目前不在Ubuntu上,因此不确定这将与路径一起使用)进入systemd用户文件夹,可能是/ etc / systemd /用户/:

[Unit]
Description=Start Script in terminal

[Service]
ExecStart=/usr/bin/xterm -hold -e /path/to/your/script.sh

[Install]
WantedBy=graphical.target

这将在我的系统(Arch)上以systemctl --user start servicename.service

运行

一旦你有一个完整的图形环境,诀窍将是启动它(如果你运行systemctl --user enable servicename.service我已经给出的脚本它几乎肯定会在你的窗口管理器之前启动,因为我不在Ubuntu我无法测试)。这可能会有所帮助(最后的回复):https://superuser.com/questions/759759/writing-a-service-that-depends-on-xorg。他们是一个Ubuntu用户,在登录后获得了一个运行图形程序的systemd服务。

如果您可以计算开始超时,您可以创建服务文件,在第一个脚本的末尾创建/启用它,然后在第二个脚本结束时禁用/删除它。