Поменять оболочку на 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 в качестве оболочки для входа в систему. Ничего подобного необходимости дать вам толчок, чтобы сделать что-то.

Другие вопросы по тегам