質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

2回答

3744閲覧

Mac、cronが動いていない。

jazzwalker

総合スコア17

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2020/03/26 03:25

編集2020/03/26 06:49

コマンドラインから実行すると動作するので、cron自体に問題があるかと見ています。

因みに、Linuxマシンでも同様の設定をしておりますが、こちらについてはうまく行っています。Macでは、うまく行っていないということです。
cronを動作させるための、Mac特有の設定などあればご教示いただきたいです。(macOS:Catalina)
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzwalker

2020/03/26 06:05 編集

自分なりに試したことも記しております。
jazzwalker

2020/03/26 05:45

因みに、Linuxマシンでも同様の設定をしておりますが、こちらについてはうまく行っています。Macでは、うまく行っていないということです。
jazzwalker

2020/03/26 06:07

cronを動作させるための、Mac特有の設定などあればご教示いただきたいです。よろしくお願いいたします。
guest

回答2

0

動いてないという根拠は?

  • 動いているけどパーミッションで失敗している
  • もしくはフルパス指定していない

とかでははないですかね

投稿2020/03/26 03:33

yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzwalker

2020/03/26 03:50 編集

>動いてないという根拠は? あるサイトに、ある時間ごとに通知を送るという設定なのですが、通知が送られていないのです。先に書きましたように、コマンドラインで実行すると、ちゃんと先様に通知が届いておりました。
yambejp

2020/03/26 03:50

実行されなのと、実行されたけどエラーで結果が得られないのでは まったく状況がことなります コマンドラインで実行する場合、cronユーザーと異なるので パーミッションで引っかかることはままあります また一般ユーザーは適切なpathが設定されていますが cronユーザはpath設定が異なるため、コマンドは フルパスでしか指定できないこともあります クロン実行時にログをとっておけば状況確認できると思います
jazzwalker

2020/03/26 03:52

crontab に書き込む際にログの指定も必要だということでしょうか?
jazzwalker

2020/03/26 03:54

未熟を晒すようですが、 crontab -e で書き込みました。やったことはそれだけです。ご教示いただければありがたく存じます。
yambejp

2020/03/26 04:07

やばそうな内容は隠してもらって構わないのですが 具体的に実行しているのはどんな感じですか? sendmail(mail?)コマンドを直書きしてる? shスクリプトで実行している?
yambejp

2020/03/26 07:17 編集

wgetで特定ページを読んでるのですね? wgetをフルパスで指定してもだめですか?
jazzwalker

2020/03/26 09:33

>wgetをフルパスで指定してもだめですか? それでやってみます。
jazzwalker

2020/03/27 10:34

うまく行きました。
guest

0

ベストアンサー

*/10 * * * * wget -q -O /dev/null http://mydnsーーーーー:ーーーーーー@www.mydns.jp/login.html

MyDNS の IP アドレスの更新ですか...

実行しているコマンドは、最初から質問に記載しておくと解決がもっと早かったのではないかと思います。


上記のようにコマンド名だけのフルパス(/からのディレクトリ)を指定していない書き方の場合、( cron で実行すると ) wget コマンドのあるディレクトリにパスが通っていない場合は command not found のエラーが出ていると思います。

cron で設定されている PATH は、通常 PATH=/usr/bin:/bin なので、/usr/bin/bin にないコマンドは コマンド名だけでは実行できません。

cronを動作させるための、Mac特有の設定などあればご教示いただきたいです。(macOS:Catalina)

macOS に限りませんが、OS 標準でインストールされている以外のツールを利用する場合は、PATH が設定されていない場合がありますので、コマンド名だけで実行した場合に command not found のエラーが発生することがあります。

cron で実行させる場合は、コマンドやファイル名は、常にフルパスで記載するようにするとこのように悩むことはなくなると思います。

実際には、cron 実行時の PATH を指定する方法もありますが、これについては、ご自身で調べてみてください。


wget は、 Linux 系は、OSインストール時にインストールされますが、 macOS の場合は、 curl は標準でありますが、wget は、インストールされていません。

macOS ということなので、おそらく wget は、brew でインストールされていると思われますので、実行するコマンドをフルパスで記載して...

/usr/local/bin/wget -q -O /dev/null http://mydns00000:Password@www.mydns.jp/login.html

だとどうなるでしょうか。

また、URL にパスワードを記載すると書き方以外の別の書き方としては、

/usr/local/bin/wget --http-user=mydns00000 --http-password=Password -q -O /dev/null http://www.mydns.jp/login.html

という書き方もできます。

最後に MyDNS は、常時SSL化されていて https でのアクセスに対応しているので https://www.mydns.jp/login.html にアクセスしたほうが良いと思います。


おまけ

curl の場合は、

/usr/bin/curl -u mydns0000:Password -i -s https://www.mydns.jp/login.html > /dev/null

で、同様なことが実行できます。

投稿2020/03/26 07:27

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzwalker

2020/03/26 08:11 編集

丁寧なご回答、ありがとうございます。 >wget は、brew でインストールされていると思われますので インストール済みです。 /usr/local/bin/wget -q -O /dev/null http://mydns00000:Password@www.mydns.jp/login.html この書式をそのまま活用させていただくことで、様子見したいと思います。(http は https とした) 以上の様だとすると、自分のLinuxマシンの場合には、既にPATHの設定がされていたと考えてよろしいのでしょうか? 問題なく動いていたので、PATHの件を気に留めておりませんでした。
CHERRY

2020/03/27 11:00 編集

Linux と macOS で、` which wget ` を実行して、コマンドのフルパスを確認してみてください。 手元の環境で試すと、 (Cent OS 7) $ which wget /bin/wget (macOS) $ which wget /usr/local/bin/wget となります。 つまり、Linux と macOS では、 wget コマンドのパスが異なっています。 コマンドのパスに注目すると Linux の `/bin` は、 cron で実行できるコマンドPATH に含まれていますが、macOS の `/usr/local/bin` は、コマンドPATH に含まれていません。 そのため、cron で実行した際に、 Linux はコマンド名だけで実行できて、macOS はコマンド名だけでは実行できないという現象になります。
jazzwalker

2020/03/26 11:44

ありがとうございます。仕組みが理解できました。
jazzwalker

2020/03/27 10:33

検証の結果、提示していただいた方法で、うまく行ったようです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問