直接启动到测试程序

直接启动到测试程序

为了进行计算机外围设备的生产测试,我每天需要启动计算机几百次。

我有一个 Ubuntu 16 测试系统,我运行它sudo systemctl set-default multi-user.target以启动到文本模式。我仍然必须按Alt-来启动第一个 tty。然后我F1必须登录,然后再次输入密码。sudotest.sh

我真正想要的是按下电源开关,查看一些通过/失败的信息,然后关闭。

测试脚本加载适当的驱动程序,然后运行测试程序,因此需要超级用户权限。

我尝试了一些 getty 的东西,但失败了。我认为这些说明不适用于 Ubuntu 16.04。

谢谢!!!

答案1

先决条件

为了直接启动到 tty1,请删除splash以下行/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

...然后运行sudo update-grub

为了防止在 tty1 上systemd产生getty,请屏蔽相应的服务:

sudo systemctl mask [email protected]

创建 systemd 服务单元

创建以下文件,当然您可以随意命名:

/etc/systemd/system/example.service

[Unit]
Description=Example tty1 service
After=multi-user.target

[Service]
Type=idle
ExecStart=/bin/bash /bin/example.sh
StandardOutput=tty
StandardInput=tty
TTYPath=/dev/tty1

[Install]
WantedBy=multi-user.target

multi-user.target到达后该服务将会启动,运行/bin/example.sh并使用tty1进行输入输出。

运行以下命令启用该服务:

sudo systemctl enable example.service

我不知道你的脚本做了什么,但是这里有一个等待按键并关闭计算机的例子(你仍然可以切换到另一个 tty):

/bin/example.sh

#!/bin/bash

echo Press any key to shutdown
read -n 1 -s -r
poweroff
exit 0

答案2

以 root 身份创建可执行文件 /etc/rc.local。在其中,您可以放入任何命令、shell 脚本等。我假设您正在做的事情是非交互式的。如果是这样,请确保将输出和错误重定向到适当的文件。rc.local 文件的末尾应该有一个“exit 0”。将您的命令放在第一行和最后一行之间。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

相关内容