Поменять оболочку на cron
У меня есть zsh-скрипт, который я хотел бы запускать через anacron каждую неделю.
Он работает нормально из интерактивной оболочки bash, но при запуске anacron я получаю команду not found error, и похоже, что она игнорирует строку shebang.
Фактический скрипт /etc/cron.weekly/:
#!/bin/sh
[ -x SCRIPT ] || exit 1
su NORMAL_USER SCRIPT
И верхняя строка фактического сценария #!/bin/zsh
Как я могу получить анакрон в честь Шебанга? Сможет ли это изменить оболочка входа NORMAL_USER на zsh?
3 ответа
Почему это не работает:
Причина, по которой он не работает, заключается в том, что su требует, чтобы вы запускали команду из терминала, а cron не предоставляет терминал.
Простой способ сделать это с помощью Vixie Cron:
Если вы не возражаете против использования Vixie Cron, я думаю, что самое простое, что нужно сделать, - это вставить сценарий для этого пользователя, выполнив следующее для этого пользователя:
crontab -e
Тогда используйте 0 0 * * 0
как раз.
Если вы хотите использовать Anacron в качестве пользователя:
Anacron полезен, если вы хотите убедиться, что работа не пропустится, если машина была выключена. Чтобы запустить от имени другого пользователя, укажите другой файл вкладки anacron и директорию спула, поместите следующее в системный cron для запуска от имени указанного пользователя: anacron -t /home/foo/etc/anacrontab -S /home/foo/var/spool/
а затем отредактируйте этот файл вкладки, чтобы запустить скрипт.
Есть также мини-инструкция, но это выглядит сложнее.
Вы должны будете проверить это, хотя, чтобы проверить. Наконец, запомните это для будущих испытаний run-parts --test /etc/cron.weekly
Шебанг должен позаботиться об этом. Первое, на что я обращаю внимание, когда скрипты работают неправильно cron
переменные среды, такие как $PATH
, $PATH
за cron
намного проще, чем у пользователя. Вы можете установить $PATH
в cron
скрипт.
Вы также можете жестко прописать полный путь ко всем исполняемым файлам в вашем скрипте.
Если zsh
не в /bin/zsh
вы должны получить недопустимое сообщение интерпретатора, но вы сказали, что оно работает нормально из приглашения Bash, поэтому я сомневаюсь, что это проблема.
Смена оболочки входа пользователя на zsh делает эту работу. В любом случае я давно хотел попробовать zsh в качестве оболочки для входа в систему. Ничего подобного необходимости дать вам толчок, чтобы сделать что-то.