Tôi có một số lệnh, chúng đang làm việc theo bash, nhưng không phải là cronjob. Để xem, nguyên nhân gây ra sự cố, tôi đang lưu kết quả đầu ra trong một tệp, đây là ví dụ của tôi:
51 * * * * source ~/.rvm/scripts/rvm >> stack.log 2>&1
Nội dung của tệp nhật ký là:
/bin/sh: 1: source: not found
Điều đó có nghĩa là, cron đang sử dụng sh
insead của bash
. Tôi đã cố gắng thay đổi nó trong /etc/crontab
:
SHELL=/bin/bash
Nhưng điều này không làm việc. Tôi đã nhìn vào /etc/passwd
và ở đây tôi thấy, daemon đang sử dụng sh
làm vỏ mặc định. Cả hai root
và pi
có bash
vỏ mặc định.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
Tôi nên làm gì để thay đổi shell mặc định cho cron? Tôi sẽ không thiết lập /bin/bash
cho người dùng daemon trong /etc/passwd
... imho đây không phải là một ý tưởng tốt.
chỉnh sửa :
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 30 2012 /bin/sh -> dash
đây là nội dung của /etc/crontab
:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
source
trong môi trường crons? Đơn giản chỉ cần chạy~/.rvm/scripts/rvm
không hoạt động? Và bạn có thể gặp vấn đề với việc sử dụng ~ trong môi trường không có bash.