Традиционный метод выполнить это состоял бы в том, чтобы иметь Вашу проверку сценария на существование файла в /var/run
когда это запускается, если ни один не существует, затем создают тот, содержащий его собственный PID. На завершении сценарий удалил бы этот файл. Если файл действительно существует, сценарий просто выходит. Таким образом независимо от того, как часто сценарий называют, он только выполнит свой основной код, если он не будет уже работать.
Проблема с этим подходом состоит в том, что грязное завершение оставляет этот подарок файла в системе, таким образом, это часто увеличивается с проверкой, чтобы видеть, существует ли указанный PID и ли, что PID для корректного сценария.
Этот метод действительно требует, чтобы Вы изменили свой сценарий вместо того, чтобы просто исправить Ваш crontab
запись, но освященный веками механизм для решения этого вида проблемы.
Bash не имеет такой функции. Zsh делает, можно настроить псевдонимы на основе расширений:
alias -s exe=mono
Это только работало бы в интерактивной оболочке, однако, не, когда программа вызывает другого.
В соответствии с Linux, можно настроить выполнение внешних двоичных файлов через binfmt_misc механизм; посмотрите Rolf Bjarne Kvinge. Хорошие дистрибутивы Linux настраивают это автоматически как часть моно пакета во время выполнения.
Если Вы не можете использовать binfmt_misc, потому что у Вас нет корневых полномочий, необходимо будет согласиться на сценарии обертки.
#!/bin/sh
exec /path/to/mono "$0.exe" "$@"
Поместите сценарий обертки в тот же каталог как .exe
файл, с тем же именем без .exe
.
Это возможно:
Станьте корнем и включите binfmt модуль в Вашем ядре с этой командой (можно хотеть добавить эту команду к сценарию начальной загрузки/etc/rc.local, так, чтобы это было выполнено на начальной загрузке):
modprobe binfmt
Добавьте строку ниже к Вашему/etc/fstab файлу:
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none
Затем имейте свою систему, выполняет следующую команду на начальной загрузке:
echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
Обязательно отметьте Ваши .exe файлы как исполняемый файл в файловой системе также:
chmod +x myprogram.exe
(отсюда: http://mono-project.com/Guide)
Обратите внимание, что это не рекомендуемый путь, прочитайте вышеупомянутую страницу Guide и также страницу о том, как сделать развертывание приложения для моно приложений.
Вы смогли встраивать файл в сценарии удара с помощью следующего руководства http://www.linuxjournal.com/content/add-binary-payload-your-shell-scripts