読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

Debianのcronやpppd、Arch のcronieは、"."を含むファイルを実行しない

Debian GNU/Linux

Debian では、 /etc/cron.daily/etc/ppp/ip-up.d などに置いたスクリプトファイルでも、 . を名称に含んだファイルは実行されません。 なぜなら、置いてあるスクリプトを実行する際に run-parts コマンドを使用していて、 Debianrun-parts.をファイル名に含むスクリプトを実行しないからです。

ちなみに Debiancron は、 Vixie Cron (ISC Cron) です。

Gentoo や Arch では

Gentoo や Arch でも run-parts.をファイル名に含むスクリプトを無視します。cronieでも run-partsを使用するため、この制約があります。(cron - ArchWiki)。 ちなみに cronieFedora 発です。

しかし、 pppd が実行する /etc/ppp/ip-up.d などはrun-parts を使用せずに実行するためこの制約はありません。むしろその正反対で、ファイル名が .sh で終わっているスクリプトを実行します

Arch: /etc/ppp/ip-up

for ipup in /etc/ppp/ip-up.d/*.sh; do
  if [ -x $ipup ]; then
    # Parameters: interface-name tty-device speed local-IP-address remote-IP-address ipparam
    $ipup "$@"
  fi
done

https://projects.archlinux.org/svntogit/packages.git/tree/trunk/ip-up?h=packages/ppp

Gentoo: /etc/ppp/ip-up

cd /etc/ppp/ip-up.d || exit

for SCRIPT in *.sh ; do
        . ./"${SCRIPT}" "$@"
done

net-dialup/ppp-scripts https://packages.gentoo.org/packages/net-dialup/ppp-scripts


そもそも run-parts とは

指定したディレクトリの中にある実行可能ファイルを実行します。

man 8 run-parts

run-parts はファイル名を見る

run-parts はデフォルトでは、 ASCIIの大文字・小文字、数字、アンダースコア(アンダーバー)、ハイフンのいずれかのみで構成される名のファイルしか実行しません。 つまり、ファイル名は英数字か_-の文字種でなければなりません。

なお、--regexオプションを使用することで、これを変更することも可能です。

run-parts の正体

debianutils パッケージ内にあります。 Gentoo や Arch も、 debianutils を採用しています。


RHEL/Fedora の場合

RHELFedora の系統では、run-parts は Debian 由来ではありませんcrontabs パッケージ内に入っており、ファイル名の制約はほとんどありません。 man 4 crontabs

RHEL/Fedora系では、 cronierun-parts を使用しますが悩む必要はなく、首尾一貫しています。