Solaris10でcronが動作しない

このQ&Aのポイント
  • 落雷によりSolaris10のcronが停止してしまったため、復旧方法を探しています。
  • svcadmコマンドでcronを有効化しましたが、cronコマンド実行時にエラーが発生しています。
  • 必要な構成ファイルがダメージを受けている可能性がありますが、cronの動作原理がわからず手がかりがありません。
回答を見る
  • ベストアンサー

Solaris10でcronが動作しない

x86ベースのSolaris10を運用しています。 以前、落雷で瞬時停電してからcronが動作しなくなりました。以下、試行錯誤の結果です。 # svcadm enable cron # svcs -a maintenance 9月_11 svc:/system/cron:default maintenance 9月_11 svc:/system/sac:default maintenance 9月_11 svc:/system/sysevent:default # cron cron could not unlink FIFO: ファイルもディレクトリもありません。 ! cannot create fifo queue (日) 10月 15 17:22:11 2006 ! ******* CRON ABORTED ******** (日) 10月 15 17:22:11 2006 おそらく、必要な構成ファイルがダメージを受けているのだと思うのですが、cronの動作原理がわからないので追いようがありません。 どうしたものでしょうか・・・よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

fsck済みかどうかの判断は、ブート時の自動fsckを想定していますので手動fsckでは判断が狂うことがあります。 fsckは本当に正常終了しましたか?fsckが何も行わずに終了しただけではないですか? いったいどのような作業をしたのでしょうか?まさかマルチユーザモードでfsckコマンドを叩いたんじゃないでしょうね。 デバイスファイルの作り直しはまったく無関係な作業です。というか、/がreadonlyなのになぜデバイスの再構築ができたのでしょうか? リブートしてもルートファイルシステムのマウント状況が直らなければ、シングルユーザモードでの操作が必要かもしれません。この程度のことで再インストールは不要だと思います。

pythian
質問者

お礼

>何も行わずに終了 正にその通りでした。fsckが走ったように見えたので満足していましたが、実際のところはスルーされていたようです。起動時にSolaris Failsafeを選択(これがシングルユーザモードだったのですね。お恥ずかしいことに気づかず、initを叩いて切り替わらないと悩んでいました)したうえで再度fsckしたところ、ファイルシステムの矛盾が見つかり、訂正したところ無事にマウントされるようになりまいた。お手数をかけてしまい申し訳ありません。この度は誠にありがとうございました。

その他の回答 (2)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

物理デバイスが表示されているのも、/がreadonlyマウントされているせいかもしれません。/etc/mnttabに書き込めませんから。。。 solarisはブートの過程でいったんルートファイルシステムをreadonlyでマウントしておいて、あとでreadwriteに変更します。 rcスクリプトがどこか壊れたのかもしれません。 手動では、 mount -o remount / というコマンドで / のマウントモードをreadwriteに変更できます。

pythian
質問者

お礼

ありがとうございます。試行してみました。 >mount: /dev/dsk/c0d0s0 は準備ができていない状態です。読み取り/書き込みのためにマウントしようとしました >mount: fsck を実行して、もう一度実行してください。 一方、fsckは正常終了します。デバイスの再構築もやってみましたが変化無し・・・いよいよ再セットアップが見えてきました・・・。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

オンラインマニュアルがあるんですから読みましょう。 FILES /etc/cron.d Main cron directory /etc/cron.d/FIFO Lock file なんてかいてありますよ。 /etc/cron.dというディレクトリが消えたとかパーミッションが変わったとか、変になってるんじゃないでしょうか。

pythian
質問者

お礼

慌てていて忘れておりました。マニュアルで解説されていましたね。見たところ、ルートがリードオンリーでマウントされており、書き込むことが出来なくなっていました。(/etc以下をいじれないので身動きできずです・・・) df -kしてみたところ、 >ファイルシステム kbytes 使用済み 使用可能 容量 マウント先 >/pci@0,0/pci-ide@11,1/ide@0/cmdk@0,0:a  5042502  194784  4797293  4%  / という表示が・・・何故物理デバイスが表示されているのか全くの不明ですが、もう少し調べてみます。ありがとうございます。

関連するQ&A

  • DNSのcronデーモンが停止してしまう

    みなさん、こんにちは。 タイトルの質問です。 solarisでDNSサーバとメールサーバを兼用しています。 そのサーバでなぜかcrondがストップしてしましました。 # tail -10 /var/cron/olog ! ******* CRON ABORTED ******** (月) 1月 27 20:46:13 2003 ps -ef | grep cron で cron のプロセス(/usr/sbin/cron)が存在していません。 messages, syslog, dmesg には、 cronに関連したメッセージはありませんでした。 # /etc/rc2.d/S75cron start でもたちあがりません。 # cd /etc/rc3.d # sh -x ./S75cron start + /usr/bin/ps -e + /usr/bin/grep cron + /usr/bin/sed -e s/^ *// -e s/ .*// pid= + [ = ] + /usr/bin/rm -f /etc/cron.d/FIFO + [ -x /usr/sbin/cron ] + /usr/sbin/cron # ps -ef | grep cron root 21364 1 0 23:46:15 ? 0:00 /usr/sbin/cron で立ち上がりました。 外部からの侵入形跡はなく、どうしてクーロンが停止したのか 理由が分かりません。 どなたかお分かりになる方、教えてください。 宜しくお願い致します。

  • Solaris10 ブートしない

    Solaris10(SPARC版)でmetadbにてミラー(Raid1)にて運用していました。 c0t0d0 ----------- c0t2d0 s0 ----- d10(/) ----- s0 s1 ----- d20(swap) ----- s1 s3 ----- unassigned ---- s3 s4 ----- unassigned ---- s4 s5 ----- unassigned ---- s5 s6 ----- unassigned ---- s6 s7 ----- metadb ----- s7 先日、"c0t2d0" のHDDが故障しました。 そのため、ブート時に以下のメッセージを出力し、それ以上進まない状況です。 Insufficient metadevice database replicas located. Use metadb to delete databases which are broken. Ignore any Read-only file system error messages. Reboot the system when finished to reload the meta device database. After reboot,repair any broken database replicas which were deleted. svc.startd[7]:svc:/system/metainit:default:Method"/lib/svc/method/svc-metainit" failed with exit status 96. svc.startd[7]:system/metainit:default misconfigured:transitioned to maintenance (see 'svcs -xv' for details) WARNING:Error writing ufs log state WARNING:ufs log for / changed state to Error WARNING:Please umount(1M) / and run fsck(1M) WARNING:init(1M)exited on fatal signal 10:restarting automatically. WARNING:exec(/sbin/init) failed with errno5. WARNING:failed to restart init(1M)(err=5):system reboot required Stop+Aよりokプロンプトからboot -sを実施しても、上記を出力し状況かわらず。 boot cdrom -sにて起動後、以下は実施するも特に問題なし。 fsck /dev/dsk/c0t0d0c0 fsck /dev/dsk/c0t0d0c1 fsck /dev/dsk/c0t0d0c7 ←metadbの領域は未実施 リカバリ方法をご存知の方がいましたら、教えていただけますでしょうか

  • cronの設定について

    Crontabで、 2008年12月12日 12時15分に * */2 * * * /root/Cron/ntp.sh と設定した場合は、 単純に 1.2008年12月12日 14時00分に実行されるスケジューリング的な動作なのでしょうか? (たとえば、時計を無理やり2009年4月3日15:00にするとntp.shは、4か月近く動作を待つ?) 2.年月日は、関係なく0,2,4,6~22時になれば実行されるタイマー的な動作なのでしょうか? (たとえば、時計を無理やり2009年4月3日15:00にしても、16時にntp.sh実行?) 実際にやっていると、1.のような感じでシェルが実行されません。 2.であれば、他に疑うべきところがあるのですが・・・ これによって、親LINUXに従属するシステム系のため、回避策が必要になってしまうのでご存知の方がいらっしゃれば教えて頂けるようお願いいたします。

  • Solaris10でPOP3サーバ設定

    Solaris10でPOP3のメールサーバを構築したいのですが、正しく動作しません。 1.パッケージの追加 pkgadd -d . ./SFWimap 2.パッケージ追加後の確認 pkginfo | grep SFWimap system SFWimap Imap - mail server daemon and utilities 3. POP3のパッケージが追加されたことを確認 pkgchk -v SFWimap : : /opt/sfw/sbin/imapd /opt/sfw/sbin/ipop2d /opt/sfw/sbin/ipop3d 4. inetd.confへ追加 vi /etc/inet/inetd.conf pop3 stream tcp nowait root /opt/sfw/sbin/ipop3d ipop3d imap stream tcp nowait root /opt/sfw/sbin/imapd imapd 5.inetconv 6. svcs | grep pop online svc:/network/pop3/tcp:default 上記までエラーなく設定できたので、いったんマシンをリブートして 下記コマンドで動作確認しました。 telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection to localhost closed by foreign host. ところが上記のように、telnet が終了してしまいます。 /var/adm/messages を見ると、 Jul 1 16:48:29 host inetd[852]: [ID 702911 daemon.error] Failed to exec inetd_start method of instance svc:/network/pop3/tcp:default: 引数が正しくありません。 と出ています。 /etc/inetd.conf の追記方法に問題があるのでしょうか。

  • solaris10(sparc)で、コンソールログインができない

    solaris10(sparc)で、コンソールログインができない 現在、solaris10(sparc)をコンソール接続をして立ち上げを行っていますが、 いつもの「solaris10 console login:」ではなく、 「Root password for system maintenance (control-d to bypass):」 と、メンテナンスモード(シングルモード?)で立ち上がるようになって困っています。 元に戻す方法をどなたか教えてください。 直前にやっていた作業としては、svsadm milestoneコマンドでmilestoneをいろいろ変更していたことと、 x windowの検証です。これらは現在もとの設定に戻しています。 また、Ctrl+Dをおしても、 「Root password for system maintenance (control-d to bypass):」 にもどるだけです。 # who -r . run-level 3 5月 17日 22:19 3 0 S なので、いちおうマルチユーザモードみたいなんですが・・どうみてもシングルモードっぽいです。 以下、電源起動からのログです。 lom>poweron lom> LOM event: +0h0m12s host power on ・ Sun Fire V120 (UltraSPARC-IIe 648MHz), No Keyboard OpenBoot 4.0, 1024 MB memory installed, Serial #54156724. Ethernet address 0:3:ba:3a:5d:b4, Host ID: 833a5db4. Boot device: disk File and args: SunOS Release 5.10 Version Generic_141444-09 64-bit Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Booting to milestone "svc:/milestone/multi-user-server:default". Hostname: solaris10 Requesting System Maintenance Mode (See /lib/svc/share/README for more information.) Console login service(s) cannot run Root password for system maintenance (control-d to bypass): /dev/rdsk/c1t0d0s7 is clean /dev/rdsk/c1t0d0s5 is clean /dev/rdsk/c1t0d0s1 is clean Reading ZFS config: done. Requesting System Maintenance Mode (See /lib/svc/share/README for more information.) Console login service(s) cannot run Root password for system maintenance (control-d to bypass): ------------------------------ 通常の起動時のログは以下のようになります。 (文字制限があるため、上記と共通の部分は割愛) Use is subject to license terms. |/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\ SUNW,eri0 : 100 Mbps full duplex link up Hostname: solaris10 /dev/rdsk/c1t0d0s7 is clean /dev/rdsk/c1t0d0s5 is clean /dev/rdsk/c1t0d0s1 is clean Reading ZFS config: *done. solaris10 console login:

  • PHPをバージョンアップしたらCRONが動かない

    CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。 PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。 [バージョンアップ内容] CentOSを5.3から5.7にバージョンアップ PHPを5.1.6から5.3.3にバージョンアップ phpMyAdmin3.4.8をインストール MySQL 5.0.77(バージョンアップせず) バージョンアップ前には ・PHPからMySQLにデータを登録するプログラムは動作していた。(ウェブサイト形式で動作確認) ・上記のプログラムはCRONで動いていた。(CRONでも動作確認) PHP5.1.6の時はCRONに下記のように登録していました。 10 * * * * /usr/bin/php /var/cron_file/test_cron.php アップデート後にウェブサイト形式でプログラムが動くことを確認しました(ページを開くと下記のプログラムが動作し、データをMySQLに登録) phpMyAdminも問題なく動きます。 CRONの問題点を探し出すために下記のことを行いました。 CRONのステータスを確認 # /etc/rc.d/init.d/crond status crond (pid 32151) を実行中... CRONをリスタート # /etc/init.d/crond restart crond を停止中: [ OK ] crond を起動中: CRONのエラーの確認 # vi /var/log/cron PHPの場所の確認 # find / -name php /usr/share/php /usr/include/php /usr/bin/php /usr/lib64/php /var/lib/php どれがPHPの場所なのかがわからないので、とりあえず5.1.6の時に指定していた「/usr/bin/php」を採用 このあたりはネットで情報を探して、登録してみたので正しいのかどうかよくわかりません。↓ PATHの記入 (その1) # vi /root/.bash_profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH (その2) #vi /etc/profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH PATHの確認 # env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/php (上記以外にもいろいろいじっていたら、このようになってしまいました。上記以外のところでどこで設定したかがわからないので、PATHを消す方法も教えていただければと思います) 「/usr/kerberos/sbin:/usr/kerberos/bin」はもともとシステムで登録されていたもので、上記で登録した「/sbin:/usr/sbin:/bin:/usr/bin」以外のもの「/usr/bin/php」などはどこで登録したかわからなくなってしまったものです。 CRONでPATHを指定する部分でPHPのバージョンによりPATHの値が異なるという情報を見つける /usr/bin/php /usr/bin/php5 /usr/bin/php53 各パターンで 「10 * * * * /usr/bin/●● /var/cron_file/test_cron.php」 をcrontab -eに登録してエラーを見てみる。 (1)「*/1 * * * * /usr/bin/php /var/cron_file/test_cron.php」 # vi /var/log/cron →エラーに何も表示されない (2)「*/1 * * * * /usr/bin/php5 /var/cron_file/test_cron.php」 → エラーに何も表示されない。 (3)「*/1 * * * * /usr/bin/php53 /var/cron_file/test_cron.php」 →エラーが表示される Dec 16 20:20:01 ドメイン crond[11412]: (root) CMD (/usr/bin/php5 /var/cron_file/test_cron.php) クローン自体は動いていて、エラーがでているような感じは把握できたのですがここで行き詰まりました。 PHPのパス関係か、MySQLのパス関係、PHPとMySQLの連係、そのあたりのどこかが原因なのでしょうか? 参考資料としてphpinfo()の情報を記載します。 Loaded Configuration File  /etc/php.ini PATH /sbin:/usr/sbin:/bin:/usr/bin 参考)プログラムの内容 --------------------------------------------- require_once ('/var/DB接続情報保存ディレクトリ/password.php') try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query=<<<EOF INSERT INTO test (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query);    $name='斉藤太郎'; $stmt->bindParam(':name', $name); $stmt->execute(); }//try_end catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); }//catch_end ---------------------------------------------

    • ベストアンサー
    • PHP
  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • cronを使ってPHPからMysqlが実行できない

    皆様いつもお世話になります。 現在MAMP環境(PHP+Mysql)でWEBシステム開発の勉強をしています。 一部機能でcronを利用して定時実行したい処理があるのですが、 その処理内にあるDBからデータを取得するプログラムが動かず困っています。 【症状など】 ・mysql_connect()の時点で 「No such file or directory」 というエラーが返ってきます。 ・上記エラーに対して、mysql.sockの場所の指定をきちんとしてやると解決することがわかり以下のコマンドをターミナルから打ち込みましたが ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock 特にエラー内容などにも変化はなく状況は変わりません。 ・ちなみにcronから実行せず、ブラウザから直接リクエスト実行するときちんと動作します。 以上です。 全く解決する糸口が見つからず本当に困っています。 お詳しいかたどなたかご教授のほどよろしくお願いいたします! 開発環境: MacOSX 10.8 PHP 5.2 Mysql 5.5.25 google Chrome 29.0.1547.62

    • ベストアンサー
    • PHP
  • VB2010で動作しない

    vb2010でWindowsアプリを作っている初心者です。 ある文字列を与えたテキストファイルを生成しようと思い、以下のコードを書きました。 VB2010の環境で実行すると、テキストファイルはできないし、何も動作しません。 同様のことを別のPCのVB2005(VS2005)で実行するときちんとファイルが生成しました。 VB2010ではエラーは出ないのですが、動作しません。 何かの参照が悪いのでしょうか。 「sw」のところにカーソルを当てると貼付の画像の内容でした。 「書き込み専用プロパティはサポートされていません。」 と表示されていますが、これと関係あるのでしょうか。 この言葉の意味がよくわかりません。 よろしくご指導下さい。 以下コード ↓ Imports System Imports System.IO Public Class formExportData 'プリント ボタン クリック Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click Dim sw As StreamWriter sw = New IO.StreamWriter("C:\Users\Taro\Desktop¥Hoge.txt", False, System.Text.Encoding.Default) sw.WriteLine("テストしています。") sw.WriteLine("この文字がプリントされる。") sw.Close() End Sub

  • PHP+CRONでのファイルバックアップ

    お知恵をお貸しください。 PHP全くの初心者です。。。 PHPスクリプトとCRONで、定期的にWebサーバー内の複数ファイル(異なるdirにあるファイル)をバックアップ用に作成したdirにバックアップ、同時に世代管理をしたいと考えています。 検索したところ、目的に近い以下のスクリプト情報が見つかりました。 見つかったスクリプトのフローは、 ・単純にファイルをコピーし、バックアップ先のdirへバックアップ、スクリプトの実行日を付加した名前へリネームして保存 ・一定時間(例は20日以上としてます)経過した古いファイルを削除 という流れです。 このスクリプトを利用し、 バックアップファイルに関する設定部分(対象、保存先、経過時間)を分かり易く、また複数設定できるようにしたいと思っています。 動作環境は一般的なレンタルサーバー(さくらインターネットやXsever)でPHPのバージョンは、「PHP5.6.30」、「PHP7.0.16」、「PHP7.1.2」の3つのVerです。 ※CRONでの実行は定刻に1日1回の予定です。 ※バックアップ先となるdirは(操作権限を持つ同一アカウントの)レンタルサーバー(同じサーバー内)のdirです。 ↓↓↓参考スクリプト↓↓↓ 1)単純にファイルをコピー、リネームして保存 $dirHome = '/home/hogehoge/domain.com/public_html/csv/'; $date = date('Ymd'); if(copy($dirHome . 'test.csv', $dirHome .'backup/test.csv')){ echo 'test.csvをコピーしました。'; rename($dirHome . 'backup/test.csv', $dirHome .'backup/test'.$date.'.csv'); echo 'test.csvをリネームしました。'; } else { echo 'test.csvをコピーできません!'; } 2)一定時間(20日以上)経過した古いファイルを削除 date_default_timezone_set('Asia/Tokyo'); $expire = strtotime("480 hours ago"); //20日前 $dir = dirname(__FILE__) . '/backup/'; $list = scandir($dir); foreach($list as $value){ $file = $dir . $value; if(!is_file($file)) continue; $mod = filemtime( $file ); if($mod < $expire){ chmod($file, 0777); unlink($file); } } 3)複数設定する場合に記述する設定内容例 ※以下のようにバックアップ対象(target)、バックアップ先dir(bk_dir)、削除対象となる経過時間(expire)を、それぞれに設定するようにしたいと思っています。 $list = []; // 設定を格納する配列 // 設定1 $list[] = [ 'target' => 'domain1.com/public_html/news/data.dat', 'bk_dir' => 'domain1.com/public_html/backup/news/', 'expire' => 480 ]; // 設定2 $list[] = [ 'target' => 'domain2.com/public_html/news/data.dat', 'bk_dir' => 'domain2.com/public_html/backup/news/', 'expire' => 480 ]; ※以下、必要な分だけ記述する。 よろしくお願いいたします。

    • 締切済み
    • PHP