bash ループでプログラムを再起動する

bash ループでプログラムを再起動する

プログラム(アミュール)を4分ごとにループで閉じて再起動したい(自分で閉じると決めるまで)。
このコードを試しました

#!/bin/bash
for (( ; ; ))
do
amule
sleep 240;
wmctrl -c aMule;
done  

しかし、それは機能しません (終了時の確認を無効にした後でも)。

編集
1) 私は平均このスクリプトは、240秒後にamuleを閉じ(180秒は間違いでした)、その後(すぐに)再度開きます。その後、240秒後に再度閉じて再度開きます。2
)はい、名前正しく、konsoleから/(wmctrl -c aMule;)という行を実行しようとすると、動作します

編集 私はそうしようとしました: 1) 新しいスクリプトを作成します:

wmctrl -c aMule
sleep 10
amule  

2) このスクリプトをcrontabに追加する(6分ごとに実行)

しかし、コマンド「wmctrl -c aMule」はターミナルから操作、(そのような)スクリプトからは動作しません。
理由がわかりません...

答え1

amuleはフォアグラウンドで動作します。スクリプトは に到達しませんsleep 240amuleバックグラウンドで実行して、スクリプトを続行できるようにします。

#!/bin/sh

while :; do
   amule &     # run in background
   sleep 240
   killall amule
      # or   wmctrl -c aMule
   wait         # in case amule needs time to close
done

答え2

watch -n 240 'amule;wmctrl -c aMule'

答え3

またはのどちらがインストールされているのかに応じて、または にwmctrl -c aMule;置き換えてみてください。amuleが TERM 信号を無視する場合は、前にオプションを追加する必要があるかもしれません。killlall amulepkill amulekillallpkill-KILLamule

関連情報