
私は、関数として、ファイルと日付を入力として受け取り、指定された日付にそのファイルを削除する小さなスクリプトを作成しようとしています。したがって、1 回実行するようにスケジュールするだけで済みます。
私はOSXを使っていて、でですが、スクリプト作成に問題があるだけでなく、 や などのサービスは OSX では廃止され、 が採用at
さcron
れるだろうと理解しています (一日中調査していました) launchd
。
私が見た限りでは、launchdはこれに対して複雑すぎるだけでなく、どのように使用すればいいのか分からないようです。特定の日時に1回限りのアクションを実行する(本当に必要なのはそれだけです)。
これについて助けていただきたいのですが、で、理想的には、ユーザーが追加のものをインストールする必要がないソリューションです。また、スクリプト化launchd
可能である必要があります (つまり、コマンドライン)。 を使用する必要がある場合は、それで構いませんが、特定の時間と日付を使用できる必要があります。
答え1
確かに cron と at は非推奨ですが、おそらく廃止されることはないはずです (廃止されたとしても、再インストールするのは難しくないでしょう)。
実際に launchd でこれを実行したい場合は、最初のスクリプトでプロパティ リストを保存して読み込み、2 番目のスクリプトでアンロードして削除する必要があります。
#!/bin/bash
month=6
day=1
hour=18
minute=0
label=com.superuser.431145
agent=~/Library/LaunchAgents/$label.plist
plist="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version=\"1.0\">
<dict>
<key>Label</key>
<string>$label</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Month</key>
<integer>$month</integer>
<key>Day</key>
<integer>$day</integer>
<key>Hour</key>
<integer>$hour</integer>
<key>Minute</key>
<integer>$minute</integer>
</dict>
</array>
</dict>
</plist>"
echo "$plist" > $agent
launchctl unload $agent 2> /dev/null
launchctl load $agent
2 番目のスクリプトは次のようになります。
plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test
を使用する場合は、まず で有効にする必要がありますsudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
。私の Web サイトからコピーした例をいくつか示します。
echo 'say test' | at now+5 # +5 and +5 seconds don't work
echo 'say test' | at +1 minute # +1 minutes results in an error
echo 'say test' | at +2 hours
echo say test > test.txt; at -f test.txt now+5
atq # at -l; list at queue
atrm 14 # at -d 14
atrm {1..9999} # remove all jobs