LINUX.ORG.RU
решено ФорумTalks

Безвременная и непостижимая смерть скрипта.

 ,


1

1

У меня есть скрипт:

#!/bin/sh
sleep 5s
for (( i=1; i <= 500000000000000000000; i++ ))
do
xdotool mousemove 700 100 click 3 key Alt+Tab sleep 2 
done

Запускается через хоткеи, назначенные в КДЕ. Убивается так же. Я могу запускать и убивать его раз по 10 в сутки, но приблизительно раз в неделю он умирает сам непонятно почему. Запускаешь - через полчаса максимум его уже нет. Сначала я думал - может счетчик заканчивается (было 50000), возможно при рестарте скрипта отсчет продолжался с прошлого момента. Но нет - добавил счетчик, всеравно умирает раз в неделю сам.

Как бы понять: 1) От чего он умирает? 2) Как бы это предотвратить?

★★★★★

Последнее исправление: LightDiver (всего исправлений: 5)

Ответ на: комментарий от LINUX-ORG-RU

Понял, вчитываюсь, спасибо) Теперь прерывается, если нажал повторно и запускатся нормально сразу, но теперь не прерывается после старта музыки, да. Нужно убивать вручную. Сделаю просто короче мелодию.

Блин, как же интересно. И почему я ушел от этого всего много лет назад. Ты посмотри какие интересные возможности циклов то есть. Я внезапно понял, что мне нравится луа. Это кошмар.

Ой, ненене.. Бесконечно в итоге его точно не надо. Надо после проигрывания музыки чтобы сам помирал, наверное. Сейчас подумаю.

Просто добавил так вот:

               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
               os.execute("killall lua");

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

Тьфу ты. Реально туплю. Можно же так:

os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
os.execute("killall kdialog_progress_helper");
break;
LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 4)
Ответ на: комментарий от LINUX-ORG-RU
               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
               os.execute("killall kdialog_progress_helper");
               file = io.open(signal_file,'w');
               file:write('stop');
               file:close();
               break;

Вот так идеально после проигрывания музыки. Тогда он все закрывает сам что нужно, пока я бегу снимать кофе и правильно завершается. При следущем использовании не нужно дважды прожимать.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Ну, единственное что стопорит остановку скрипта это музыка если уж она заиграла, можно грохнуть mpv тут

#! /bin/env lua

local signal_file_name = '.coffee'
local signal_file = os.getenv('HOME')..'/'..signal_file_name;
local file = io.open(signal_file);

if(file) then
    local stat = file:read('*all');
    file:close();
    if stat == 'working' then
       file = io.open(signal_file,'w');
       file:write('stop');
       -- когда скрипт уже запущен есть веростность
       -- что играет музыка, если мы нажимает кнопку второй раз
       -- значит мы завершаем текущий скрипт
       -- и если играет музыка она грохается
       -- сразу после этого завешиться qdialog через сигнал ему через 
       -- dbus, а потом после ещё 1 итерации завершится скрипт
       os.execute("killall mpv"); -- тут грохнуь mpv который вешает скрипт
       -- ведь завершая текущий скрипт мы просто делаем запись сигнала 
       -- ему вот тут и выходим сразу же.
       return 0; 
    else
...

А остальное вернуть как было, скрипт сам себе посылает stop и на новой итерации (через 1 секунду сам завершается), до этого qdialog должен завешится корректно, ты вроде писал что всё нормально, кроме звука музыки.

Ну ты уж делай правки под себя как тебе удобнее, я со своей колокольни всех случаев использования не предугадаю. =) Скрипты то домашние, главное что-бы работало, а как в целом по барабану, не продакшон чай ::) Экспериментируй, сам не заметишь начтёшь строчить под себя 100+ строк луашного кода на всякое разное

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Нихрена не работает, если в скрипт вписать вот это:

os.execute("xdotool mousemove 700 100 click 3 key Alt+Tab utimer -t 300ms");

Это он почему? Причем в сигнальный файл пишет, что воркинг.

Отдельно как sh-скрипт, это работает, но странно - спамит все время параллельно буквой j.

Кстати, если вписать не командой, а сх-скриптом, тоже не работает.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Наверное потому что ошибки

dron@gnu:~/Рабочий-стол/SONC$ xdotool mousemove 700 100 click 3 key Alt+Tab utimer -t 300ms
(symbol) No such key name 'utimer'. Ignoring it.
(symbol) No such key name 'utimer'. Ignoring it.
Error: Invalid key sequence '-t'
Failure converting key sequence '-t' to keycodes
Error: Invalid key sequence '-t'
Failure converting key sequence '-t' to keycodes
xdo_send_keysequence_window reported an error for string '-t'
dron@gnu:~/Рабочий-стол/SONC$ 

Может так xdotool mousemove 700 100 click 3 key --delay 300 Alt+Tab ?

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Я уже разобрался, просто вынес таймер в отдельную строку с точкой с запятой и заработало. А за delay спасибо, попробую.

LightDiver ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.