crond と run-parts 、そして crontab と cron.d

crond のログ

cron の設定についてググると /etc/crontab のことがヒットします。それを見て素直に設定していたのですが、あるとき /var/log/cron のログを見て違和感が。下のような感じになっていました。

Sep 30 14:00:01 illya CROND[20809]: (root) CMD (/etc/cron.every10min)
Sep 30 14:01:01 illya CROND[20822]: (root) CMD (run-parts /etc/cron.hourly)
Sep 30 14:01:01 illya run-parts(/etc/cron.hourly)[20822]: starting 0anacron

crond が直接実行しているやつは僕が設定したもので、 run-parts 経由で実行しているのがデフォルトで設定されていたものです。どちらでも実行できるようですが、バラバラってのもどうかと思い、まとめることにしました。

run-parts 経由にする

検索キーワードに「 run-parts 」を含めると /etc/cron.d/ 以下のファイルについて書かれたページがヒットします。 ls してみると 0hourly と raid-check というファイルがあります。 0hourly の中身は下のようになっています。

# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

これをコピーして書き換えます。僕は下のようにしました。

# Run the ever 10 minutes jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * root run-parts /etc/cron.every10min

気分的にスッキリしたんですが、またいつの頃にか新しい設定を追加するときに同じ間違い(?)をしてしまいそうです。

Linux で削除したのと同じユーザ名でユーザを追加したらパーミッションで困った

削除したのと同じユーザ名でユーザを追加した

見出しのままなのですが、僕は何も考えず userdel camellia した後、 useradd camellia としたわけです。ホームディレクトリは残してあったのでそのまま使いました。

ログインするとエラー

camellia でログインすると下のようなエラーが出ます。

bash: /home/camellia/.bashrc: 許可がありません

パーミッションは問題なし

エラーの文言からパーミッションの問題だとすぐに分かるのですが、ホームディレクトリとかその他のパーミッションは下のように表示されて問題なさそうです。

# ls -l
drwx------. 2 camellia camellia 79 10月 11 2016 camellia

伝家の宝刀

chmod 777 /home/camellia

まぁとりあえず抜きました。そしたらログインしときにエラーが出ません。どうなっているんでしょう? まるでユーザ camellia が所有者でもグループでもないような挙動……。

UID と GID

いろいろと試行錯誤して分かったのは、ユーザ名とグループ名は同じでもユーザ ID とグループ ID は違っていたということです。

アルファベットとかで表記するユーザ名やグループ名に対して、ユーザ ID とグループ ID は数値です。新しく追加される度にインクリメントされて増えていくので、今回のような困ったことが発生しました。

解決

まずはディレクトリやファイルのユーザ ID とグループ ID を見てみます。

# ls -n /home/camellia
drwx------. 2 1000 1000 79 10月 11 2016 camellia

次はユーザのを見てみます。

# id camellia
uid=1001(camellia) gid=1001(camellia) groups=1001(camellia)

ユーザ ID とグループ ID を変更するなら下のようになります。

# usermod -u 1000 camellia
# groupmod -g 1000 camellia

ディレクトリやファイルの所有者をユーザ ID とグループ ID で指定するには下のようにします。

# chown 1001:1001 /home/camellia

おまけで分かったこと

削除したユーザ名とかって、知らないところに残り続けるってことっぽいですね。

QNAP に rsync した際のグループ設定

QNAP にバックアップしたらデータが見えなかった

CentOS のファイルサーバから rsync で QNAP にバックアップをしています。 CentOS に Windows でデータを保存するとユーザ root 、グループ public で書き込まれます。さて、これをバックアップすると、 QNAP 上ではユーザ admin 、グループ 1004 になってしまい、そんなグループに所属していない QNAP 上の僕のアカウントでは見ることさえできないのです。この 1004 は CentOS 上のグループ public の GID です

rsync に何かいいオプションがないか探したのですがない模様。仕方ないので QNAP に新たなグループ public を作ってみました。ダメでした。

で、 QNAP 上のグループ public の GID を 1004 に設定することで大成功。 Windows からバックアップデータにアクセスできるようになりました。

GID の変更方法

SSH で QNAP にログインして /etc/config/group を直接書き換えて再起動します。それだけです。

CentOS 7 に google-drive-ocamlfuse をインストールできなかった

ダメだった

結論から言いますと opam というのが下のメッセージを表示し、ファイルをダウンロードできず先に進めませんでした。ダウンロードする方法を探せばどうにかなるかもしれませんが、面倒なので諦めました。

[ERROR] The sources of the following couldn't be obtained, aborting:
          - base.v0.11.1
          - dune.1.2.1
          - result.1.3
          - sqlite3.4.4.0
          - topkg.0.9.1
          - xmlm.1.3.0

参考にしたページ

下のページを参考にしました。僕の環境が CUI のみなので、その解決方法を含みます。

手順

  1. まず yum groupinstall "Development Tools" とのことですが、表示されるインストールリストを見て考えました。実際のところ、これ全部は要らんだろうと。何かあればシェルに文句を言われるでしょうから、とりあえず無視しました。

  2. yum install sqlite-devel fuse fuse-devel libcurl-devel zlib-devel m4 しました。メッセージ曰く依存関係で fuse-libs も必要だそうです。

  3. yum install ocaml ocamldoc ocaml-camlp4-devel ncurses-devel しました。

  4. cd /etc/yum.repos.d/
    wget http://download.opensuse.org/repositories/home:ocaml/CentOS_7/home:ocaml.repo
    yum install opam

    とのことですが、その URL が存在しないようです。仕方ないので OCaml の opam のページに行きました。

  5. sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh) とのことです。言われるまま実行しました。

  6. opam がインストールできたところで opam init だそうです。しかし、 unzip とかなんかのパッケージが足りないとのことで yum からインストールします。しかし、 Bubblewrap はリポジトリになく、 Make とかする必要があるっぽいです。面倒なので opam 実行時に opam init --disable-sandboxing として回避しました。

  7. 次は opam update です。しばらく待ちました。

  8. 目的の FUSE filesystem over Google Drive のインストールです。 opam install google-drive-ocamlfuse としてしばらく待ちました。が、下のようなことを言ってきます。

    [ERROR] The sources of the following couldn't be obtained, aborting:
              - base.v0.11.1
              - dune.1.2.1
              - result.1.3
              - sqlite3.4.4.0
              - topkg.0.9.1
              - xmlm.1.3.0

    ここで僕は終了したわけです。

ファイルをスタートやタスクバーにピン留めする方法

はじめに

ファイルスタートタスクバーピン留めできたら便利だと思うのですが Windows はやらせてくれません。そこでちょっと考えてみました。

ファイルをスタートにピン留めする

下の要領でピン留めします。タスクバーにピン留めするのも同じ感じです。

  1. 目的のファイルを開くアプリのショートカットを作ります。

    アプリのショートカットを作る
  2. ショートカットのプロパティ画面で、アプリのパスにファイルのパスを付け足します。例えば下のようにします。

    "C:\Program Files\EmEditor\EmEditor.exe" "\\illya.c\sviel\bridge.txt" アプリのプロパティの画面
  3. ピン留めします。

    ピン留めする
  4. スタートにピン留めできました。

    スタートにピン留めされている