如何在启动时启动多个 shell 脚本

如何在启动时启动多个 shell 脚本

我有六个 shell 脚本,当我登录时会启动它们。shell 脚本会启动 Python 脚本,这些脚本会从网络上抓取各种内容,比如新闻标题、天气信息等,然后我通过 conky 将它们添加到我的桌面。

问题是每次启动所有这些 shell 脚本真的很麻烦。

我已经寻找并尝试了一些东西,但似乎没有任何效果。

有人能告诉我最好的方法吗?顺便说一句,我无法将 shell 脚本合并到一个文件中,因为它们在应用初始命令后都会“休眠”不同的时间。

谢谢。

-- 编辑(添加以下评论)--

所有脚本均具有以下格式:

#!/bin/bash

while true; do
    python /home/scott/debkaget.py > /home/scott/debka.txt
    sleep 120
done

可以将其添加到配置文件中吗?我需要睡眠功能。我正在运行 KDE 4.9。

答案1

如果您正在“添加到桌面”,则您正在运行窗口管理器,如果您正在使用 bash,则可能是 Linux。在这种情况下,您最好从 Xsession 文件(或变体)将脚本启动到后台~/.Xsession/etc/X11/Xsession有关更多信息,请尝试

man 5 Xsession
man 1 xinit

答案2

一种可能性是将适当的调用添加到您的.bash_profile.profile文件中。当您手动运行它们时,您是否&在末尾添加了一个以在后台运行它们?如果是这样,请在您的配置文件中也这样做。

这里的主要问题是“如果您已经运行了登录 shell,会发生什么情况”。如果有另一个副本正在运行,这 6 个脚本是否会表现正常?它们是否会费心检测是否有另一个副本正在运行。

如果您登录的是 GUI 桌面,则有多种方式可以在桌面启动时运行程序;使用它来运行您要处理的脚本。要获得更准确的说明(来自其他人),请提供有关您的环境的更多信息。

答案3

您可以使用这个基本策略:

  • 让脚本通过创建 pid 文件来启动script_name.pid。如果脚本的 pid 文件存在,则终止脚本
  • 让脚本在后台运行

当你从 .bash_profile (或类似文件)调用时进程号文件将阻止 .bashrc 为每个新 shell 结束更多进程。

根据 NormanRamsey 的说法,您将添加到 XSession(或其他窗口管理器):

# Web Scrapers
runshell_yahoonews.sh
runshell_blog_disney.sh
runshell_stackoverflow_election.sh
runshell_twitter_dad.sh
runshell_twitter_origamistork.sh
runshell_blog_daringfireball.sh

考虑写作bash 函数. 你可以有一个文件lib_scrapers.sh

#!/bin/bash 
pid_path = "~/.X-scrapers/"
suff = '.pid'

function pidfile_create(invoker) {
  if [ ! -e $pid_path$invoker$suff ];
  then
    # make it
    echo $$ > $invoker$suff
  else
    # alert it existance
    cat $pid_path$invoker$suff
  fi
}
function pidfile_destroy(invoker) {
  rm $pid_path$invoker$suff
  if [ -e $pid_path$invoker$suff ];
  then
    echo "$pid_path$invoker$suff could not be destroyed properly"
  fi
}

然后在每个爬虫程序的第 2 行(例如runshell_yahoonews.sh)。如果爬虫程序已在运行,这将阻止脚本执行。

lib_scrapers.sh

if [ pidfile_create($0) ]
then
  exit
fi

在每个刮刀的末端,放

pidfile_destroy($0)

您可能有其他权衡,但对于您所描述的,这听起来是合理的。

相关内容