使程序重新加载在文件更改时已打开的文件



我需要播放一个 .swf文件,然后在更改文件以重新加载播放器时使用新内容。可悲的是,我选择的程序不会监视更改文件。我提出了一些复杂的解决方案:

sudo apt-get install incron gtk-gnash
echo "my_username" | sudo tee -a /etc/incron.allow # allow my_username to run incron
incrontab -e

将以下内容添加到cormontab:

/home/my_username/path/myfile.swf IN_MODIFY /home/my_username/path/run.sh

run.sh包含:(也chmod 700 run.sh

#!/bin/sh
killall gtk-gnash
gtk-gnash /home/my_username/path/myfile.swf

您可以看到这远非优雅。我还能怎么做?

如果这对您很重要,则在Ubuntu 12.04上。这是我对Askubuntu

的问题的重复

编辑:澄清,我选择使用GTK-gnash,独立播放器,这是不需要的,Web浏览器也可以做,但似乎不是必需的

您所描述的是文件更改监视器的作业。

首先,鉴于您是从Shell启动内容,因此您现有的" cormontab"解决方案是一个很好的起点。incrotontab是基于(7)的解决方案的事实,这是一个巨大的优势。这意味着您没有进行轮询,这节省了CPU。

您正在要求使用外壳和系统级解决方案,而我不是Flash程序员,所以我会坚持您的问题,尽管我认为更好的解决方案是创建一个闪光灯"包装器"使用AS3 Loader类吸吮您现有的SWF,并从consontab启动的内容中接收通知。Flash编程不超出此答案的范围,尽管它可能会提供更优雅的解决方案。

所以...

您的当前方法由启动脚本组成,该脚本首先杀死任何现有的gtk-gnash进程,然后运行新的脚本。当cormontab看到对文件的更改时,它会从头开始重新启动。如果您相信您的Flash应用程序将永远不会崩溃并退出,并且如果您总是有完美的时机,那是一个可行的解决方案。一个问题是,您在一个过程的死亡与下一个过程的开始之间有未知的延迟。您的killall发送信号,gtk-gnash可以立即响应该信号,或者暂停后。随着短暂的停顿,您可能会发现自己在旧的SWF完全消失之前发射了SWF。随着较长的停顿,您可以简要显示桌面。

更好的解决方案可能只是在循环中启动SWF:

#!/bin/sh
while true; do
    date '+[%Y-%m-%d %T] myfile.swf relaunched' >> /var/log/swf.log
    gtk-gnash /home/my_username/path/myfile.swf
done

然后使cormontab仅杀死现有过程:

/home/my_username/path/myfile.swf IN_MODIFY killall gtk-gnash

通过将Killall与启动分开,您可以确保GTK-GNASH的新实例直到旧的实例才真正退出并将控件返回到包裹的shell脚本。

当然,您可以安装inotify-tools软件包,而不是使用consontab,然后运行循环:

#!/bin/sh
while inotifywait -e modify /home/my_username/path/myfile.swf; do
    killall gtk-gnash
done

相同的syscalls,相同的效果,不同的前端。

如果您想对要杀死的过程有所了解,则还可以将GTK-gnash的PID存储在临时文件中。这是Flash Player包装器的另一种看法:

#!/bin/sh
while true; do
    date '+[%Y-%m-%d %T] myfile.swf relaunched' >> /var/log/swf.log
    gtk-gnash /home/my_username/path/myfile.swf &
    echo $! > /var/run/gtk-gnash.pid
    wait
done

和cormontab线:

/home/my_username/path/myfile.swf IN_MODIFY xargs kill < /var/run/gtk-gnash.pid

您可能采用的另一种策略来减少杀戮/重新启动的可见 是在以最小或没有内容运行时对myfile.swf进行屏幕截图,然后将其用作播放器上的桌面墙纸。(或同等。我不知道您是如何设置的。)我为几年前设置的数字标牌解决方案做了类似的事情 - 我们不时需要杀死和重新启动独立播放器,所以我们只是制作了出现的第一页的"帧"。当我们杀死了FlashPlayer过程时,该系统似乎"似乎"重置,盒子里没有内容……然后,一秒钟后,内容会显示出来。(是的,这是一个黑客。)

另一个提示:我一直发现Adobe的独立闪光灯("投影仪")比GTK-GNASH更可靠,更兼容。您可以在Adobe支持中心下载页面上找到Adobe的独立播放器,该页面与他们的标准Flash Player下载页面不同。

相关内容

  • 没有找到相关文章