Cygwinのcronによるスケジュールでショートカットを作成する方法

経緯

現在、Windows7 (32bit)でgnupack13.00を使用しています。その中に含まれているcygwinを使用して cronで毎日データのバックアップをとるようにしています。

今回、必要があって毎日0:00にショートカットを作成することを試みました。試行錯誤の結果うまくいくようになったのでその経緯をメモとして残しておきます。

具体的には、 るびきち様のメルマガ 「●るびきちEmacs 087●るびきち大ピンチ!」から「●るびきちEmacs 090●helmってみた」まで4回にわたるファイル管理の内容です。

この中の「●るびきちEmacs 087●」に書かれている方法です。この中ではLinuxを念頭に置いているため「シンボリックの作成」となっていますが、ここではWindowsの話のため「ショートカット」と表記します。

ショートカットの作成

ここからが本題です。

まずは失敗例

今のcygwinではターミナルから ln -s を実行するとシンボリックリンクが作成され、 Windowsからでもショートカットとして使用できます。

ところがcronを使用して同様のコマンドを実行してもショートカットが作成されず、リンクファイルになってしまいました。

解決法

そこで、しばらく悩んだ上で Cygwin でシンボリックを使うための環境変数 を参考にし、 cronで実行したいファイルに

export CYGWIN="winsymlinks"

を追加したところ、ショートカットが作成されるようになりました。

おそらくcronを実行するユーザー”cygserver”(下記を参照)にはシンボリックリンクを作成する権限がないのでしょう。

別の解決法

mklink コマンドでショートカットを作成するように設定した バッチファイルをスケジューラーから起動させてもいいです。

こちらでも試しましたが、 cygwinで行いたかったため上記の方法をとりました。

(参考)cronの設定

cronのインストール

今回は、 CygwinでCronサーバーを動かす の方法を参考にしています。

cygwinのターミナルを「管理者として実行」し、

cron-config

を実行したあとにユーザー”cygserver”を追加します。

cronの確認

どのページでも書かれているように

crontab -e

を実行してから

* * * * * /bin/date >> /tmp/crontest.log

と入力し、 1分毎に時刻が出力されたら成功です。

始めはユーザー”cygserver”を作成せずに行っていましたがログに全く出力されませんでした。そこでユーザー”cygserver”を作成したところ成功しました。