web-dev-qa-db-ja.com

スクリプトはcrontab経由では実行されませんが、スタンドアロンで正常に動作します

uptimeが3日以上の場合にコンピューターを再起動するように通知するスクリプトがあります(ただし、コンピューターが1日以上稼働しているためにスクリプトが実行されているかどうかを確認するためだけに0日に設定されています) ..)。

私はそれが最もエレガントなスクリプトではないことを理解していますが、私は試みています! :)

#!/bin/bash

up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"

chmod + x checkup.shで実行可能にしました。./checkup.sh経由で端末から実行すると正常に動作します

このスクリプトのcrontabエントリは次のとおりです。

46 14 * * * /home/username/Desktop/./checkup.sh

したがって、毎日14時46分に実行されます。

だから...私は本当に愚かなことをしなかった場合を除き、実行する必要があると考えています。また、このbashスクリプトを/binに移動しても大丈夫だと思いますか?

48
dearN

一度に一つのことを:

まず、ユーザーベースのbinフォルダーを提供しましょう。

cd ~/ && mkdir bin

Crontabを使用します。本当にシンプルなものから始めましょう:

* * * * * touch /tmp/testing.txt

さて、それでうまくいきます

次に、同じことを行うスクリプトを実行してみましょう

* * * * * /home/username/bin/touchtest.sh

動作するまで1分間に1回実行する
いいえ、行の途中に./は必要ありません。 ./は、相対URLを指定する場合に使用します。
さて、それでうまくいきます

それでは、xmessageを呼び出すスクリプトを実行してみましょう。

* * * * * /home/username/bin/rebootwarn.sh

働いていない

まず、環境変数に依存しないようにする必要があります。これには、パス設定、x11設定などが含まれます(pythonおよびRuby環境変数が思い浮かびます...)

Anacronの適切なcronファイルのように見せましょう。これをテストとして保存しました

#Borrowed from anacron
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron

* * * * *   /bin/bash /home/username/bin/test.sh

毎分実行するように設定

crontab testインポートする

スクリプトについて

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"`

さて、それでうまくいきます...私たちは何をしましたか?
明示的に設定しなかったパスに依存しないようにすべてのコマンドを変更しました
bashを使用してスクリプトを明示的に実行しました
スクリプトに、DISPLAY:0.0になると予想していることを伝えました

69
RobotHumans

Googleのマニュアルを読んで問題を解決しました。

説明:

  1. #!/bin/bashをヘッダーとして使用するスクリプトがあります
  2. スクリプトを/home/wc3/palert/に配置しました

分析:

  1. crontabでスクリプトを実行できません
  2. しかし、手動で実行すると、出力が表示され、ウェブ上で結果を見ることができます
  3. スクリプトフォルダでスクリプトを実行したときとは異なり、crontabが環境を取得できないことを意味します

回答:

  1. 以下の行を使用してスクリプトに環境を設定します:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert
    

    これを変更:/home/wc3/palert
    with:スクリプトを置く場所。 /home/budi/script.sh

サンプル:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...

スクリプトをcrontabに配置してみてください。

8
budi satriyo