Có 'cron' chạy tập lệnh shell đặt môi trường trước khi chạy lệnh.
Luôn luôn.
# @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
# Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min Hour Day Month Weekday Command
#-----------------------------------------------------------------------------
0 * * * * /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1 1 * * * /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2 3 * * 0 /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21 3 1 * * /usr/bin/ksh /work1/jleffler/bin/Cron/monthly
Các tập lệnh trong ~ / bin / Cron đều là các liên kết đến một tập lệnh duy nhất, 'runcron', trông giống như:
: "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
# Commands to be performed by Cron (no debugging options)
# Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile
base=`basename $0`
cmd=${REAL_HOME:-/real/home}/bin/$base
if [ ! -x $cmd ]
then cmd=${HOME}/bin/$base
fi
exec $cmd ${@:+"$@"}
(Được viết bằng một tiêu chuẩn mã hóa cũ hơn - ngày nay, tôi sẽ sử dụng một shebang '#!' Khi bắt đầu.)
'~ / .Cronfile' là một biến thể trong hồ sơ của tôi để sử dụng bởi cron - hoàn toàn không tương tác và không gây tiếng vang vì lý do ồn ào. Bạn có thể sắp xếp để thực thi .profile và cứ thế. (Nội dung REAL_HOME là một vật phẩm trong môi trường của tôi - bạn có thể giả vờ nó giống như $ HOME.)
Vì vậy, mã này đọc môi trường thích hợp và sau đó thực thi phiên bản lệnh không Cron từ thư mục chính của tôi. Vì vậy, ví dụ, lệnh 'ngày trong tuần' của tôi trông như sau:
: "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
# Commands to be done each weekday
# Update ICSCOPE
n.updics
Lệnh 'hàng ngày' đơn giản hơn:
: "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
# Commands to be done daily
# Nothing -- most things are done on weekdays only
exit 0