启动终端并在重启后从 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 它在第二个脚本的末尾。
我一直在创建一个安装脚本,该脚本将用于仅在 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 它在第二个脚本的末尾。