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

launch terminal and execute script from systemd after reboot

我一直在创建一个安装脚本,该脚本将用于仅在 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 天.

上次尝试:

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

提前为您提供的任何帮助干杯。

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

这是一个简短的示例,说明如何从 systemd(目前不在 Ubuntu 上,因此不确定这是否适用于路径)在终端中启动脚本,进入您的 systemd 用户文件夹,大概 /etc/systemd/user/:

[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 它几乎肯定会在你的 window 经理,因为我不在 Ubuntu 我无法测试)。这可能会有所帮助(最后回复): https://superuser.com/questions/759759/writing-a-service-that-depends-on-xorg 。他们是 Ubuntu 用户,在登录后获得 运行 图形程序的 systemd 服务。

如果您知道启动超时,您可以创建服务文件,create/enable 它在第一个脚本的末尾,然后 disable/delete 它在第二个脚本的末尾。