如何在重启后执行一次命令/脚本

如何在重启后执行一次命令/脚本

在 Centos6 上,我有这个脚本,我需要在终端重新启动后执行一次。
我怎样才能做到这一点?
如果我像这样执行sh /path/to/script.sh- 一切都很好,但是如果我添加rc.local( sh /path/to/script.sh) 或crontab( @reboot sh /path/to/script.sh) - 什么也不会发生。
我很乐意提供任何帮助。

#!/bin/bash
gnome-terminal -x sh -c 'zenity --info --text="Msg1" --title="Text1..." --timeout=10
<some_command>
zenity --info --text="Msg2" --title="Text2..."  --timeout=10
<some_command>
zenity --info --text="Msg3" --title="Reboot..."  --timeout=10
sleep 1
exec bash'

答案1

Gnome 终端是 X 应用程序(GUI 应用程序)。如果您想从 cron 运行任何 X 应用程序,只需“让他知道”您正在使用哪个显示器,因为cron它不会在正常的 shell 环境中执行命令。

首先检测您的系统中正在使用哪个显示器:

echo $DISPLAY

输出将是这样的:

:0

或者

:1

假设您的DISPLAY变量是:1,然后在带有 GUI 应用程序变量的命令之前添加到脚本中DISPLAY=:1,即:

#!/bin/bash
DISPLAY=:1 gnome-terminal -x sh -c 'zenity --info --text="Msg1" --title="Text1..."  --timeout=10;<some_command>;zenity --info --text="Msg2" --title="Text2..."  --timeout=10;<some_command>;zenity --info --text="Msg3" --title="Reboot..."  --timeout=10;sleep 1; exec bash'

除此之外,cronCentOS 中还有另一种可能性,可以在系统启动时运行一次某些东西——rc-local服务机制。创建(如果尚未创建)文件:

/etc/rc.d/rc.local

内容:

#!/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.

/path/to/script.sh

exit 0

将您希望在启动时执行的所有命令放入该文件中。

使rc.local文件可执行:

chmod +x /etc/rc.d/rc.local

启用rc-local服务并启动它:

systemctl enable rc-local
systemctl start rc-local

检查服务是否正常运行:

systemctl status rc-local

相关内容