タグ付けされた質問 「cron」

Cronは、ユーザーが定期的にコマンドを実行できるジョブスケジューラです。


7
cronがジョブを実行するときの「作業ディレクトリ」とは何ですか?
コマンドラインから実行すると機能するスクリプトがありますが、スケジュールを設定するとcron、ファイルやコマンドが見つからないというエラーが発生します。私の質問は2つあります。 を使用してcronジョブをスケジュールするcrontab -e場合、ユーザーIDを許可の基礎として使用しますか?または、ある種のcronユーザーIDとそれに関連する権限を使用しますか? cronジョブが起動されたとき、作業ディレクトリは何ですか?実行するスクリプトを指定するディレクトリですか、それとも別のディレクトリですか? これが私のcronジョブです。 15 7 * * * /home/xxxx/Documents/Scripts/email_ip_script.sh 実際のスクリプトは次のとおりです。 vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`" echo "$vIP_ADDR" sed "s/IPADDR/$vIP_ADDR/g" template.txt > emailmsg.txt ssmtp XXXXX@gmail.com < emailmsg.txt mail生成されたメッセージを表示すると、次のエラーが表示されcronます。 sed: can't read template.txt: No such file or directory /home/xxxx/Documents/Scripts/email_ip_script.sh: line 15: ssmtp: command not found 見つけることができませんtemplate.txtが、スクリプトと同じディレクトリにあります。実行することもできませんがssmtp、ユーザーとして実行できます。これを適切に機能させるために何が欠けていますか?



6
cronタブジョブ内で「日付」を実行するにはどうすればよいですか?
ログファイル名に現在の時間が含まれているcronスクリプトのログファイルを作成したい。これは私が使用しようとしたコマンドです: 0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log 残念ながら、それが実行されるとこのメッセージが表示されます。 /bin/sh: -c: line 0: unexpected EOF while looking for matching ``' /bin/sh: -c: line 1: syntax error: unexpected end of file dateさまざまな方法でパーツをエスケープしようとしましたが、あまり運がありません。これをcrontabファイルでインラインで実行することは可能ですか、またはこれを行うためにシェルスクリプトを作成する必要がありますか?

11
既存の環境変数を使用してcronコマンドを実行するにはどうすればよいですか?
既存の環境変数を使用してcronコマンドを実行するにはどうすればよいですか? シェルプロンプトが表示されている場合はecho $ORACLE_HOME、パスを入力して取得できます。これは、環境変数の1つです~/.profile。ただし、~/.profilecronスクリプトがロードされないため、$ORACLE_HOME変数が設定されていないためスクリプトが失敗します。 で、この質問の著者は、作成言及~/.cronfilecronのための変数を設定したプロファイルを、その後、彼は彼が彼に続けてスクリプトにすべての彼のcronコマンドをロードするための回避策ありません~/Cronディレクトリを。ファイルのよう~/.cronfileなものは良いアイデアのように聞こえますが、答えの残りの部分は少し扱いに​​くいようで、誰かが同じ結果を得る簡単な方法を教えてくれることを望んでいました。 スクリプトの開始時に次のようなものを追加できると思いますが、source ~/.profileそれは冗長になる可能性があるようです。 では、どのようにしてcronスクリプトに対話型シェルプロファイルから変数を読み込ませることができますか?


2
cron内から出力をファイルにリダイレクトする方法は?
私は一日の特定の時間に実行する必要があるバックアップスクリプトを持っているので、私はcronこのタスクに使用しており、cron内からバックアップスクリプトの出力をlogfile。 crontab -e */1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log 上記のcronエントリでは、両方stderr and stdoutをログファイルにリダイレクトしています。 上記のcronジョブはsyslog 、backup.shファイルに従って指定されたタスクに従って正常に実行されますが、ログファイルには何も書き込みません。 /var/log/syslog Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log) CLIからスクリプトを実行すると、必要に応じて機能し、出力がログファイルに書き込まれます ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 successfully copied testdir test.txt successfully copied ------------------------------------------------------------------------------------- ranveer@ranveer:~$ だから、ファイルの出力がcron内からファイルにリダイレクトされないのはなぜですか。

2
Cron vs Systemdタイマー
最近、cronに代わるもの、つまりsystemdタイマーが存在することが指摘されました。 ただし、systemdまたはsystemdタイマーについては何も知りません。cronのみを使用しました。 Arch Wikiには少し議論があります。しかし、私はcron賛否両論に焦点を合わせて、systemdタイマーとの間の詳細な比較を探しています。私はDebianを使用していますが、これら2つの選択肢が利用可能なすべてのシステムの一般的な比較をお願いします。このセットには、Linuxディストリビューションのみが含まれる場合があります。 これが私が知っていることです。 クロンは非常に古く、1970年代後半に遡ります。cronの元の作成者は、Unixの作成者であるKen Thompsonです。Vixie cronは、最近のLinuxディストリビューションのcronが直接の子孫であり、1987年からのものです。 Systemdはもっと新しく、やや物議をかもします。ウィキペディアによると、最初のリリースは2010年3月30日でした。 したがって、systemdタイマーに対するcronの利点の現在のリストは次のとおりです。 Cronは、インストール可能なサポート対象ソフトウェアであるという意味で、Unixライクなシステムであることが保証されています。それは変わりません。対照的に、systemdは、将来Linuxディストリビューションに残る場合と残る場合があります。これは主に初期化システムであり、別の初期化システムに置き換えることができます。 Cronは使いやすいです。systemdタイマーよりも明らかにシンプルです。 cronに対するsystemdタイマーの利点の対応するリストは次のとおりです。 Systemdタイマーは、より柔軟で機能が豊富です。しかし、その例が欲しいです。 したがって、要約すると、回答で見た方が良いものがいくつかあります: cronタイマーとsystemdタイマーの詳細な比較(それぞれの使用の長所と短所を含む)。 一方ができることともう一方ができないことの例。 cronスクリプトとsystemdタイマースクリプトの少なくとも1つの並列比較。

4
リモートXディスプレイでウィンドウを開きます(「ディスプレイを開けない」理由)。
昔々、 DISPLAY=:0.0 totem /path/to/movie.avi ラップトップからデスクトップにsshすると、トーテムがmovie.aviデスクトップで再生されます。 これでエラーが発生します: No protocol specified Cannot open display: Debian squeezeが両方のコンピューターで安定した時点で再インストールしましたが、設定が壊れたと思います。 私はこれをグーグルで調べましたが、私の人生では自分が何をしているのか理解できません。 (VLCには動作するHTTPインターフェイスがありますが、sshほど便利ではありません。) cronジョブからこれを実行しようとすると、同じ問題が発生します。
81 ssh  x11  cron 

4
/ dev / null /へのcronジョブを完全に消音するにはどうすればよいですか?
Ubuntuデスクトップとdebianサーバーには、毎分実行する必要があるスクリプト(私のスペースオンラインbrowsergameの分ティックを呼び出すスクリプト)があります。 問題は、debian派生ではcronが/var/log/syslog実行するたびにログを記録することです。私はそれが繰り返し実行されたメッセージを繰り返し見ることになります/var/log/syslog: Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1) プログラムの出力を抑制するために/dev/null、たとえば、プログラムからすべてのエラーおよび警告メッセージを隠すためにリダイレクトできることを知っています。このようにcrontabに行を作成できます。 * * * * * root /usr/local/sbin/mycommand.sh > /dev/null しかし、私はcronジョブを実行し、生成されたすべての出力またはエラーがNULLにパイプされることを確認したいので、syslogでメッセージを生成せず、電子メールを生成しません 編集: cronログを変更して、ここで提案されているような別のログにリダイレクトするソリューションがあります/etc/syslog.conf しかし、欠点は、すべてのcronjobのすべての出力がリダイレクトされることです。 どういうわけか、単一のcronjobを個別のログファイルにリダイレクトすることはできますか?できれば、cron.hourlyファイル自体の内部で構成可能です。

1
cronシェルを変更する方法(shからbash)
shの代わりにbashでcrontabのコマンドを実行することは可能ですか?を使用してコマンドをbashに渡すことができることは知っていますが-c、それは面倒であり、とにかくshは使用しません。
70 shell  cron 

13
シェルスクリプトの正しいロック?
シェルスクリプトの1つのインスタンスのみが同時に実行されていることを確認する必要がある場合があります。 たとえば、それ自体でロックを提供しないcrondを介して実行されるcronジョブ(たとえば、デフォルトのSolaris crond)。 ロックを実装する一般的なパターンは、次のようなコードです。 #!/bin/sh LOCK=/var/tmp/mylock if [ -f $LOCK ]; then # 'test' -> race begin echo Job is already running\! exit 6 fi touch $LOCK # 'set' -> race end # do some work rm $LOCK もちろん、このようなコードには競合状態があります。2つのインスタンスの実行が両方とも行3の後、$LOCKファイルに触れることができる前に進むことができる時間枠があります。 cronジョブの場合、2つの呼び出しの間隔が数分あるため、これは通常問題になりません。 しかし、ロックファイルがNFSサーバー上にある場合など、問題が発生する可能性があります。その場合、いくつかのcronジョブが行3でブロックしてキューに入れることができます。NFSサーバーが再びアクティブになった場合、並列実行ジョブの雷の群れがあります。 Webで検索すると、この問題の良い解決策のように思えるツールロックランが見つかりました。これを使用して、次のようなロックが必要なスクリプトを実行します。 $ lockrun --lockfile=/var/tmp/mylock myscript.sh これをラッパーに入れるか、crontabから使用できます。 これは、使用lockf()可能な場合(POSIX)をバックにフォールflock()(BSD)。またlockf()、NFSを介したサポートは比較的広く普及しているはずです。 に代わるものはありlockrunますか? 他のcronデーモンはどうですか?適切な方法でロックをサポートする一般的なcrondはありますか?Vixie …

8
crontabの@rebootはrootでのみ機能しますか?
man 5 crontab crontabを使用してブート時にスクリプトを実行する方法についてはかなり明確です。 These special time specification "nicknames" are supported, which replace the 5 initial time and date fields, and are prefixed by the `@` character: @reboot : Run once after reboot. そこで、幸いにもcrontabに(rootではなく、ユーザーアカウントの下に)1行追加しました。 @reboot /home/me/myscript.sh しかし、何らかの理由で、マシンの再起動時にmyscript.shが実行されません。(コマンドラインから呼び出すと正常に実行されるため、権限の問題ではありません) 私は何が欠けていますか? @Anthonの質問に答えるための更新: Oracle-linuxバージョン:5.8(uname:2.6.32-300.39.2.el5uek#1 SMP) cronバージョン:vixie-cron-4.1-81.el5.x86_64 はい、/home あるマウントされたパーティション。これが問題のようです。これを回避するにはどうすればよいですか? 現在、myscript.shテキストメッセージのみをのファイルにエコーします/home/me。
64 cron  reboot 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.