- ベストアンサー
soralisのcronについて
現在、soralisを用いてシステム開発を行っているのですが、 定時処理にcronを用いる事が決定しています。 そのcronの設定をC言語から操作する事は可能なのでしょうか? イメージとしては、 1.main()に引数として設定値を渡す。 2.渡された設定値でcronの設定ファイルが更新される。 上記のような事が可能であれば、お教えいただきたいと思います。 年末にご質問して申し訳ありませんが、宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例えば、午前1:00に起動 0 1 * * * /usr/local/bin/myjob.sh となっていて、実行後に「起動時刻を1時間後に設定しなおす」ということをやるなら crontab -l | awk '{ if ($6 == "/usr/local/bin/myjob.sh" ){ $2=$2+1 ; if($2>23){$2=0}} ; print}' |crontab - # $6は6番目のフィールド(=実行命令の最初のフィールド)、$2は2番目のフィールド(=時刻) ただ、同じことは、cronの更新しなくても 0 * * * * /usr/local/bin/myjob.sh で可能ですし、 0,6,12,18時の6時間毎、だったら 0 0,6,12,18 * * * /usr/local/bin/myjob.sh という書き方もできます。 また、この例の myjob.shの中で「現在時刻を確認→処理を実行するか判定」とすることでより細かい制御もできます。 あとは、既にあるようにatコマンドを利用して、次回実行時刻を設定する方法もあります。 時刻を更新するだけなら、crontabを毎回書き換えるよりは、後半にあるような方法がいいのでは、と思います。
その他の回答 (3)
- mtaka2
- ベストアンサー率73% (867/1179)
> 具体的にはcronが動作する日付のみ更新したいと考えております。 定期的に実行するのではなく、指定した日付に一回だけ実行したいということでしょうか。 だったら、cron ではなく、 at でコマンド実行を指定した方がいいかと思います。
- mtaka2
- ベストアンサー率73% (867/1179)
cronの設定ファイルそのものは、形式はcrontab -l で表示されるものそのままなのですが、 そのファイル所有権がrootになってますので、一般ユーザが書き換えることはできません。 root に suid したプログラムで書き換えるという手段もありますが、 セキュリティ的に注意が必要ですので、 回答1に挙げられているように、crontab コマンドを通して設定を更新するようにした方が良いかと思います。
- kmee
- ベストアンサー率55% (1857/3366)
不可能ではないけれど、Cでは 標準入力から現在の設定を読み込み、新しい設定を標準出力に出すようにして crontab -l | a.out XXXX (のような感じでCのプログラムを実行) | crontab - のようなシェルスクリプトでcrontabを実行するのが楽ではないでしょうか? Cでpopenで crontabと繋いでもいいですが。 逆に、その変更内容次第では、わざわざCを使わずともシェルスクリプトや、awk,Perl等のスクリプトだけでもいいのでは。
補足
具体的にはcronが動作する日付のみ更新したいと考えております。 shellのみだとどのように実装できるのでしょうか。