Jawaban di atas adalah cara standar / "benar" untuk melakukannya.
Pendekatan lain yang lebih sederhana dari sudut pandang yang lebih "pengguna akhir" adalah memiliki tugas yang dijadwalkan atau latar belakang menulis hasilnya ke file "log". File dapat berada di mana saja di sistem Anda, tetapi jika tugas berjalan sebagai root (dari cron
, dll.), Maka di suatu tempat di bawah /var/log
adalah tempat yang baik untuk meletakkannya.
Saya membuat /var/log/maint
direktori dan membuatnya dapat dibaca oleh semua orang dan saya memiliki file yang dapat dibaca di bawah yang disebut "cadangan" di mana saya mencatat output dari skrip cadangan saya.
Saya membuat direktori sendiri sehingga file saya tidak tercampur dengan hal-hal yang dihasilkan oleh sistem.
Untuk meletakkan barang di sana (dalam bash):
BACKUP="/var/log/maint/backup"
echo "my message" >> "${BACKUP}"
The >>
menyebabkan pesan yang akan ditambahkan ke file bukan Timpa setiap kali.
Jika skrip saya memiliki banyak output, saya menggunakan skrip atau fungsi untuk output sehingga semuanya dilakukan dengan cara yang sama. Di bawah ini adalah versi saya saat ini (versi berlebihan): (hal-hal VERBOSE ada ketika saya menjalankan skrip dari terminal dan ingin melihat apa yang terjadi untuk keperluan debugging.)
#!/bin/bash
## backup_logger
## backup system logging module
## Copyleft 01/20/2013 JPmicrosystems
## Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]
## If present, -v says log to console as well as to the log file
## <caller> is the name of the calling script
## If <caller> <log message text> is not present, write a blank line to the log
## Must be placed in path, like ~/bin
## If log is owned by root or another user, then this must run as root ...
## If not, it just aborts
##source "/home/bigbird/bin/bash_trace" ## debug
SCRIPT_NAME="$(basename $0)"
USAGE="Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]"
SYSLOGDIR='/var/log/maint'
SYSLOGFILE="${SYSLOGDIR}/backup.log"
LOGGING=1
VERBOSE=0
if [ "${1}" == "-v" ]
then
VERBOSE=1
shift
fi
##LOGGING=0 ## debug
##VERBOSE=1 ## debug
## Only zero or two parameters allowed - <caller> <log message text>
RC=0
if [ "$#" -eq 1 ] || [ "$#" -gt 2 ]
then
echo "${USAGE}"
RC=1
else
if [ ! -w "${SYSLOGFILE}" ]
then
touch "${SYSLOGFILE}"
if [ $? -ne 0 ]
then
echo -e "$(date) ${1} ${2}"
echo "${SCRIPT_NAME} Can't write to log file [${SYSLOGFILE}]"
RC=1
exit ${RC}
fi
fi
if [ -n "${1}" ]
then
(( LOGGING )) && echo -e "$(date) ${1} ${2}" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo -e "$(date) ${1} ${2}"
else
(( LOGGING )) && echo "" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo ""
fi
fi
exit $RC
Sunting: at
Contoh sederhana yang menulis ke file pengguna
Belum pernah menggunakan ini selamanya, jadi saya mengetahuinya dengan beberapa skrip sederhana.
Script pertama hanya menjadwalkan acara menggunakan at
. Perintah itu sendiri bisa saja diketik ke terminal, tapi saya malas - terutama ketika saya harus melakukannya berkali-kali saat mengujinya tanpa membodohi sejarah perintah.
#!/bin/bash
## mytest_at_run
## Schedule a script to run in the immediate future
echo "/home/bigbird/bin/mytest_at_script" | at 00:56
Script kedua adalah skrip yang dijadwalkan untuk dijalankan
#!/bin/bash
## mytest_at_script
## The script to be run later
echo "$(date) - is when this ran" >> /home/bigbird/log/at.log
Saya membuat kedua skrip dalam editor teks, menyimpannya, dan kemudian membuat mereka masing-masing dieksekusi menggunakan chmod 700 script-file-name
. Saya menempatkan keduanya di $HOME/bin
direktori saya untuk kenyamanan, tetapi mereka bisa di mana saja pengguna saya memiliki akses penuh. Saya menggunakan 700
untuk skrip apa pun yang hanya untuk pengujian, tetapi pada sistem pengguna tunggal, bisa juga begitu 755
.
Saya sudah memiliki direktori yang dipanggil /home/bigbird/log
untuk menyimpan output dari mytest_at_script
. Ini juga bisa di mana saja pengguna Anda memiliki akses penuh. Pastikan sudah ada sebelum skrip berjalan atau minta skrip membuatnya.
Untuk menjalankannya, saya hanya memastikan waktu untuk at
perintah mytest_at_run
itu sedikit di masa depan dan kemudian menjalankannya dari terminal. Saya kemudian menunggu sampai berlari dan memeriksa isinya $HOME/log/at.log
.
bigbird@sananda:~/bin$ cat ~/log/at.log
Fri Sep 14 00:52:18 EDT 2018 - is when this ran
Fri Sep 14 00:56:00 EDT 2018 - is when this ran
bigbird@sananda:~/bin$
Beberapa catatan:
Meskipun saya menjalankan at
dari pengguna saya, itu tidak tahu lingkungan saya seperti PATH
direktori rumah saya dan saya, jadi saya tidak menganggap itu. Saya menggunakan jalur penuh seperti yang saya lakukan untuk cron
pekerjaan apa pun . Dan jika saya ingin membuatnya menjadi cron
pekerjaan, saya tidak perlu mengubah apa pun hanya untuk membuatnya berjalan.
Aku digunakan >>
dalam mytest_at_script
output append ke file log bukannya >
yang akan diganti pada setiap run. Gunakan mana yang paling sesuai dengan aplikasi Anda.
sleep 3m; echo Running