3

У меня есть шесть сценариев оболочки, которые я запускаю при входе в систему. Скрипты оболочки запускают скрипты Python, которые выходят и вычищают различные вещи из сети, такие как заголовки новостей, информация о погоде и т.д., Которые я добавляю на свой рабочий стол с помощью conky.

Проблема запуска всех этих сценариев оболочки каждый раз, когда это настоящая боль.

Я искал и пробовал некоторые вещи, но ничего не получается.

Может кто-то здесь пролить свет на лучший способ сделать это, пожалуйста. Кстати, я не могу объединить сценарии оболочки в один файл, потому что все они «спят» в течение другой продолжительности после применения начальной команды.

Благодарю.

- Изменить (добавив следующие комментарии) -

Все скрипты имеют следующий формат:

#!/bin/bash

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

Можно ли это добавить в профиль? Мне нужен аспект сна. Я использую KDE 4.9.

3 ответа3

4

Если вы "добавляете на рабочий стол", у вас работает оконный менеджер, а если вы используете bash, то это, вероятно, Linux. В этом случае вам, вероятно, лучше всего запускать сценарии в фоновом режиме из файла Xsession, либо ~/.Xsession или /etc/X11/Xsession или вариант. Для получения дополнительной информации попробуйте

man 5 Xsession
man 1 xinit
3

Одна из возможностей - добавить соответствующие вызовы в ваш файл .bash_profile или .profile . Когда вы запускаете их вручную, добавляете ли вы & в конце, чтобы запустить их в фоновом режиме? Если так, сделайте это в своем профиле тоже.

Основная проблема здесь - «что произойдет, если вы уже запустили оболочку входа в систему». 6 скриптов ведут себя нормально, если уже запущена другая копия? Удалось ли им обнаружить, что уже запущена еще одна копия?

Если вы входите в систему с рабочего стола с графическим интерфейсом, то есть способы запуска программ при запуске рабочего стола; используйте его для запуска сценариев, с которыми вы пытаетесь разобраться. Для получения более точных инструкций (от других людей) предоставьте больше информации о вашей среде.

2

Вы можете использовать эту базовую стратегию:

  • чтобы скрипты начинались с создания pid-файлов в виде script_name.pid . Сделать скрипты прерванными, если для них существует файл pid
  • сценарии запускаются в фоновом режиме

Когда вы вызываете из своего .bash_profile (или аналогичного), файлы pid не позволяют .bashrc запускать больше процессов для каждой новой оболочки.

Согласно 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)

Вы могли бы иметь другие компромиссы, но это звучит разумно для того, что вы описываете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .