vine-users ML アーカイブ



[vine-users:073468] Re: /tmp -> /dev/shm での crontab

  • From: 山口 和人 <kazuto-y@xxxxxxxxxxxxxxxx>
  • Subject: [vine-users:073468] Re: /tmp -> /dev/shm での crontab
  • Date: Tue, 8 Nov 2005 12:51:41 +0900
山口です。

並さん、

> /etc/fstab から /dev/shm のエントリを削除しても良いのかどうかわからなかったことと、

/dev/shm は POSIX 共有メモリで必要とされるようです。
ただし、SYSV 共有メモリでは不要なようです。
  参考: http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/tmpfs.txt.html

Vine Linux の /usr/src/linux/configs/kernel-2.4.31-*.config では、
SYSV 共有メモリ = yes なので、普通問題ないと思いますが、/dev/shm のエントリの削除は
注意したほうがよいと思います。
SYSV 共有メモリ = yes でカーネルをコンパイルしていますし、/dev/shm エントリも
そのままにしてあります。 



> しかし、vi がすべておかしくなるならともかく、crontab だけというのが不思議な一件でした。

私も前から気になっていたので、ちょっと調べました。
crontab -e は、
  f = ファイルを作る (ex. "/tmp/crontab.99999")
  mtime = f の mtime
  エディタに f を渡し、子プロセスとして産む
    (エディタ・プロセスが起動 -> 終了する)
  エディタ・プロセスの終了を待つ
  mtime == f の mtime           # <= この比較がポイント
  mtime に違いがなければ終了。
    ("no changes made to crontab" を出力)
のように動くようです。

で、エディタの違いによりどうなるかですが、
===== [gedit の場合] ======
$ pwd
/tmp
(別term: EDITOR=gedit crontab -e)
$ ls -li crontab*
  14294 -rw-------    1 kazuto   kazuto        434 Nov  8 12:05 crontab.2279
(別term: crontab で編集/保存)
$ ls -li crontab*
  14338 -rw-------    1 kazuto   kazuto        486 Nov  8 12:06 crontab.2279
  14294 -rw-------    1 kazuto   kazuto        434 Nov  8 12:05 crontab.2279~
(別term: crontab 終了)
===========================
===== [vi の場合] ======
$ pwd
/tmp
(別term: EDITOR=vi crontab -e)
$ ls -li crontab*
  14379 -rw-------    1 kazuto   kazuto        434 Nov  8 12:06 crontab.2285
(別term: crontab で編集/保存)
$ ls -li crontab*
  14379 -rw-------    1 kazuto   kazuto        486 Nov  8 12:07 crontab.2285
(別term: crontab 終了)
=========================

gedit の動作イメージは、
  (file をバッファに読み込む)
  mv file file~     # バックアップ
  (バッファ の file に対して編集)
のようになってます。
crontab -e は gedit 終了後の比較で、**ファイル名が 'file' のものでなく**
gedit 起動前に open していたファイル(= file~) の mtime と、事前保存していた
mtime を比較する(当然、同じもの)ので、ファイル更新なし、と誤認されるようです。


磯部@ナムコさんの [vine-users:073465]
> ~/.vimrc に「set cp」を書くと回避できます。
> 編集中にコマンドで打っても有効です。

私の環境では、:se cp? は vi、crontab -e 経由の vi ともに
  nocompatible
です。
vi の動作イメージが、/dev/shm を使う(あるいはパッケージの違い?)で
何故変わる(?)のかは謎が残ります。


-- 
山口 和人 (Kazuto YAMAGUCHI) <kazuto-y@xxxxxxxxxxxxxxxx>