【问题标题】:Run script automatically on startup: script doesn't work correctly启动时自动运行脚本:脚本无法正常工作
【发布时间】:2014-12-18 06:20:17
【问题描述】:

我想在装有 Ubuntu 的 Parallella 板启动时运行 bash 脚本。我在 SO 中搜索,并在此处找到说明:

我的 bash 脚本是test.sh,它只有一行:

echo "Hello World" &> /home/qsp/WIP/test/hello.txt

1)我尝试的第一种方法是将脚本的绝对路径添加到/etc/rc.local

/home/qsp/WIP/test/test.sh

2)我尝试的第二种方法是按照上面接受的答案。

sudo mv test.sh /etc/init.d/
sudo update-rc.d test.sh defaults 

在这两种情况下,脚本都是在启动后执行的,并且在文件夹中创建了一个文件hello.txt。但是,文件的内容是空的(所有者是 root)。我想知道我是否遗漏了什么。谢谢。

======更新=======

根据天网的回答,我将脚本更改为:

echo "Hello World" | tee /home/qsp/WIP/test/hello.txt

并且脚本在正确启动后写入文件。我还有一个问题,为什么我使用&> 的原始脚本不起作用,尽管从命令行运行它仍然有效。

【问题讨论】:

  • 也检查this一个

标签: linux bash ubuntu startup autorun


【解决方案1】:

正如第一个 SO 问题所引用的那样,您应该使用 init 脚本样式。像这样:

case "$1" in
start)
    #startup code
    ;;
stop)
    #stop code
    ;;
restart)
    #restart code
    ;;
esac

也可以看看https://github.com/fhd/init-script-template/blob/master/template

【讨论】:

    【解决方案2】:

    编辑/etc/rc.local 并添加命令后,

    检查您的脚本必须始终以 exit 0 结尾。

    还要确保您使用chmod 命令使其可执行

    chmod 777 test.sh
    

    将输出行改为

    echo "Hello World" | tee /home/qsp/WIP/test/hello.txt
    

    【讨论】:

    • 谢谢。你能解释一下为什么我应该把“&>”改成“| tee”。有什么区别?
    • tee 是一个命令,其工作方式与 shift 类似,但方式不同,这使得它可以在这种情况下使用,例如在 shell 脚本中发生重定向的情况。
    • 谢谢。更改为tee 后,脚本会正确写入文件。我想知道为什么&> 在启动后不起作用,而如果我只是从命令行运行它仍然可以工作。
    【解决方案3】:

    创建 .desktop 文件并将您的系统配置为在登录时自动启动

    如下创建.desktop文件

        $ vim ~/.config/autostart/test_script.desktop
    

    添加以下信息

       [Desktop Entry]
       Type=Application
       Name=Test script
       Exec=~/test.sh
       X-GNOME-Autostart-enabled=true
    

    注意~/test.sh 应该指向你创建的脚本。保存它。

    使其可执行:

    $ chmod o+x ~/.config/autostart/test_script.desktop

    重新启动并在下次登录时运行您的脚本。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多